我有以下课程
public static class MyClass
{
public static double Converter(int mpg)
{
return Math.Round((double)mpg / ((double)36 / 12.74), 2);
}
}
Run Code Online (Sandbox Code Playgroud)
和NUnit单元测试
[TestFixture]
public class ConverterTests
{
[Test]
public void Basic_Tests()
Assert.AreEqual(8.50, MyClass.Converter(24));
}
}
Run Code Online (Sandbox Code Playgroud)
我的单元测试失败了
Expected: 8.5d
But was: 8.4900000000000002d
Run Code Online (Sandbox Code Playgroud)
当我调试方法返回8.49时,单元测试从哪里得到长数字,最后是2?
单元测试显示的结果与我在执行代码时看到的结果相同。这是一个简短但完整的程序,用于显示使用我的类检索到的确切结果。DoubleConverter
using System;
class Test
{
static void Main()
{
double x = Convert(24);
Console.WriteLine(DoubleConverter.ToExactString(x));
}
static double Convert(int mpg)
{
return Math.Round((double) mpg / ((double) 36 / 12.74), 2);
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
8.4900000000000002131628207280300557613372802734375
Run Code Online (Sandbox Code Playgroud)
使用计算器,我预计未四舍五入的结果为 8.4933333 - 当四舍五入到小数点后两位时,它确实会四舍五入到“大约 8.49”。
所以实际上,问题更多的是为什么你在调试器中看到 8.5,而不是单元测试失败的原因。我自己没有看到这一点,所以你可能想具体了解一下你是如何调试的。调试时,您可能会看到不同的结果,因为: