LoginSignup
0
1

More than 5 years have passed since last update.

.NETの四捨五入について

Last updated at Posted at 2019-02-01
端数処理
decimal value = 2.5;
double value2 = -2.5;

//切り上げ
value = Math.Ceilng(value);

//切り下げ
//Floor: -3、Truncate: -2
value = Math.Floor(value2);
value = Math.Truncate(value2);

//四捨五入
//MidpointRounding.AwayFromZeroを指定しないと結果は2となる
value = Math.Round(value, MidpointRounding.AwayFromZero);

通常のMath.Roundを使うと「銀行家の丸め」といって、
厳密な四捨五入ではなく、結果が偶数になるような丸め方がされます。
(〜.5を全て切り上げする計算を、何度も足し続けると
大きな値側に誤差がよるからです。)

ビジネスロジックで金額の計算時などに、
「四捨五入をする」とされている場合には
異なる演算結果が出るので注意が必要です。

また、切り下げのMath.FloorとMath.Truncateでは、
正の値では同じ結果となりますが、
負の値では、
Floorは-無限大側、Truncateは0側に寄せて丸められます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1