use*_*178 3 .net c# bankers-rounding rounding
AFAIK .NET的默认圆形选项是偶数,所以Math.Round(1.225,2)应该给1.22,但它给出1.23.
Math.Round(2.225,2) = 2.22
Math.Round(100.225,2) = 100.22
Run Code Online (Sandbox Code Playgroud)
我试过的所有值都是最接近的,但只有1.225和-1.225回合到1.23和-1.23.
主要问题是在float和中double,小数位数不是值的一部分,精度不是十进制,而是二进制.并且没有可以1.225准确表示的有限二进制数.
所以,当你这样做时Math.Round(1.225f, 2),你实际上做的更像是Math.Round(1.22500002f, 2)- 没有涉及中点舍入.
同样的问题出现带有Math.Round(2.225f, 2)-它只是"真正的"价值稍微小比2.225f,所以结果向下取整.但是仍然没有涉及中点舍入.
如果需要小数精度,请使用decimal.既不是float也不double是为十进制精度而设计的 - 它们适用于例如物理计算,但不适用于例如会计.
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |