完整性检查,使用Math.Round舍入到小数点后两位

Joa*_*rar 0 c#

出于好奇,为什么以下测试失败?Math.Round,不是吗?

    [Test]
    public void MathRound()
    {
        Assert.AreEqual(7.13, Math.Round(7.125,2));
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Jon*_*eet 7

Round文档(看Round(double, int):

将双精度浮点值舍入到指定数量的小数位,并将中点值舍入到最接近的偶数(示例).

你的价值是完全7.125(有没有缺乏精确度在这里),它在你四舍五入到两位数后的值的中点,使数字四舍五入为偶数.

如果你想要一个"向上"的中点舍入模式,你应该这样说:

Assert.AreEqual(7.13, Math.Round(7.125, 2, MidpointRounding.AwayFromZero));
Run Code Online (Sandbox Code Playgroud)

(无论如何,您通常应该Assert.AreEqual在比较double值时提供容差,但这是一个单独的讨论.)