最近我发现C#Math.Round的问题让我感到困惑:
Math.Round(1.125, 2) == 1.12
然而:
Math.Round(1.115, 2) == 1.12
另外
Math.Round(1.225, 2) == 1.23
和
Math.Round(1.215, 2) == 1.22
最后三个样本是有意义的,只是想知道第一个样本是如何工作的?
关于文件,如果是舍入到最接近的偶数,那么为什么在第三个样本轮到奇数?
有人知道如何舍入数字吗?
更新
当我放置链接时,我知道尝试舍入到最接近的偶数,我想知道如何实现它(使用移位字节)?
答案 0 :(得分:2)
在最后三个例子中,它按照记录的方式工作。但在第一种情况下,它似乎出错了:
Math.Round(1.125, 2) == 1.12 // Would expect 1.13
原因很简单:浮点数存储为二进制值;不是小数。所以它将1.125转换为的二进制值四舍五入。在这种情况下,它略低于1.125,因此错误的方式"。