Math.Round如何工作?

时间:2015-05-21 06:26:15

标签: c#

最近我发现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

最后三个样本是有意义的,只是想知道第一个样本是如何工作的?

关于文件,如果是舍入到最接近的偶数,那么为什么在第三个样本轮到奇数?

有人知道如何舍入数字吗?

更新

当我放置链接时,我知道尝试舍入到最接近的偶数,我想知道如何实现它(使用移位字节)?

1 个答案:

答案 0 :(得分:2)

在最后三个例子中,它按照记录的方式工作。但在第一种情况下,它似乎出错了:

Math.Round(1.125, 2) == 1.12 // Would expect 1.13

原因很简单:浮点数存储为二进制值;不是小数。所以它将1.125转换为的二进制值四舍五入。在这种情况下,它略低于1.125,因此错误的方式"。