出于好奇,为什么以下测试失败?没有Math.Round,围绕?
[Test]
public void MathRound()
{
Assert.AreEqual(7.13, Math.Round(7.125,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)...验证两个指定的双精度数是否相等,或者是否在彼此指定的精度范围内。如果断言不在彼此的指定精度范围内,则断言失败。