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

时间:2014-09-25 21:36:24

标签: c#

出于好奇,为什么以下测试失败?没有Math.Round,围绕?

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

enter image description here

2 个答案:

答案 0 :(得分:7)

来自Round文档(查看Round(double, int)

  

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

你的值正好是7.125(这里不乏精度),并且在你要四舍五入的数字后面的值的中点,所以这个数字四舍五入为偶数。 / p>

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

Assert.AreEqual(7.13, Math.Round(7.125, 2, MidpointRounding.AwayFromZero));

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

答案 1 :(得分:0)

您正在使用以下比较对象的方法:

AreEqual(Object,Object)...验证两个指定的对象是否相等。如果对象不相等,则断言失败。

您可以尝试使用以下方法来比较双打,看看是否得到不同的结果:

AreEqual(Double,Double,Double)...验证两个指定的双精度数是否相等,或者是否在彼此指定的精度范围内。如果断言不在彼此的指定精度范围内,则断言失败。