実数を小数第n位に丸める(小数第n+1位で四捨五入する)には
どうしたらよいのでしょうか?
Result := trunc(Hensu * power(10, n)) / power(10, n);
よりもスマートな書き方はありますでしょうか?
Format関数を使うとかはどうでしょう?
こんにちわ、Brockです。
もしDelphi6以降を使用しているなら、Mathユニットに RoundTo 関数というものもあります。
Delphi5以前ではなかったと思いますけど。
RoundTo 関数は内部で papier さんの方法と似たような事してますので、自分で関数を作っても良いと思います。
Truncは切り捨てですから、この場合RoundかRoundToですね。
ただ、RoundToは、Banker's Roundingでの四捨五入ですから、もしかしたら予想している値でない場合が出てくるかもしれません。
例えば、
d1 := RoundTo(23450.0, 2);
d2 := RoundTo(23350.0, 2);
この2つの値は、どちらも23400になります。
それぞれ、23500, 23400にしたいのであれば、自前でコーディングする必要があるかもしれません。
単純な四捨五入であればSimpleRoundToという関数があります。(←Delphi6以前はないかも...)
自分でコーディングされるなら...
Result := trunc((Hensu / power(10, n)) + 0.5) * power(10, n);
ってな感じかな。(机上コーディングなので間違っていたらごめんなさい。)
RoundToは銀行家丸め、SimpleRoundToは非対称丸めのようですので、
正確に四捨五入しようと思えば、自分でコーディングしなければならないようですね。
にしのさんのおっしゃるとおりTruncは切り捨てですので、
そこらへん修正してやってみます。
皆様どうもありがとうございました。
ツイート | ![]() |