小数第n位に丸めるには?

解決


papier  2004-02-28 21:32:10  No: 7419

実数を小数第n位に丸める(小数第n+1位で四捨五入する)には
どうしたらよいのでしょうか?

Result := trunc(Hensu * power(10, n)) / power(10, n);

よりもスマートな書き方はありますでしょうか?


LupinⅢ  URL  2004-03-02 20:27:10  No: 7420

Format関数を使うとかはどうでしょう?


Brock  2004-03-02 22:44:33  No: 7421

こんにちわ、Brockです。
もしDelphi6以降を使用しているなら、Mathユニットに RoundTo 関数というものもあります。
Delphi5以前ではなかったと思いますけど。

RoundTo 関数は内部で papier さんの方法と似たような事してますので、自分で関数を作っても良いと思います。


にしの  2004-03-02 23:15:45  No: 7422

Truncは切り捨てですから、この場合RoundかRoundToですね。
ただ、RoundToは、Banker's Roundingでの四捨五入ですから、もしかしたら予想している値でない場合が出てくるかもしれません。

例えば、
  d1 := RoundTo(23450.0, 2);
  d2 := RoundTo(23350.0, 2);
この2つの値は、どちらも23400になります。
それぞれ、23500, 23400にしたいのであれば、自前でコーディングする必要があるかもしれません。


masayan  2004-03-03 00:19:48  No: 7423

単純な四捨五入であればSimpleRoundToという関数があります。(←Delphi6以前はないかも...)

自分でコーディングされるなら...

Result := trunc((Hensu / power(10, n)) + 0.5) * power(10, n);

ってな感じかな。(机上コーディングなので間違っていたらごめんなさい。)


papier  2004-03-03 02:32:11  No: 7424

RoundToは銀行家丸め、SimpleRoundToは非対称丸めのようですので、
正確に四捨五入しようと思えば、自分でコーディングしなければならないようですね。
にしのさんのおっしゃるとおりTruncは切り捨てですので、
そこらへん修正してやってみます。

皆様どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加