我在工作中进行了一些单元测试,其中一个断言出现了一个奇怪的错误。请注意,expectedValue和actualValue都是双倍的。
Assert.AreEqual(expectedValue, actualValue);
例外情况表明它们并不相同,详细说明了“期望值:< 6.8>实际值:< 6.8&gt ;.”
预期值是硬编码的6.8,实际值是使用通过我们的分类方法(例如Equal Records或Jenks Natural Breaks)的数据库值来制定的。
我的猜测是差异可能是两个值的尾数相似,直到最低有效位。我更新了测试以包含一个epsilon来查找这两个值是否足够接近,但我很好奇是否有办法强制尾数与我显示该双倍的显示值相匹配。这样的尾数修正是否存在?
答案 0 :(得分:3)
我并不完全确定强迫尾数与显示值匹配的含义...例如, 没有正好为0.1的双精度值。
如果您希望某些代码显示双精度的完全值,我会有一个DoubleConverter.cs文件,这样可以轻松实现:
double d = 0.1;
string x = DoubleConverter.ToExactString(d);
另一种方法是在将double转换为字符串时使用往返格式说明符(“r”) - 这可以保证结果具有足够的信息以便稍后再现相同的精确值。换句话说,如果是x != y
,那么x.ToString("r") != y.ToString("r")
。
答案 1 :(得分:1)
您可以将两者都转换为字符串:actualValue.ToString("0.000")
并比较这些字符串。
可以紧密匹配您的要求。
答案 2 :(得分:0)
如果要测试默认显示值是否匹配,只需比较默认显示值:
Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());