c#.net双问题…6.8!= 6.8?
-
29-09-2019 - |
题
我在工作中进行了一些单位测试,并出现了其中一个主张的特殊错误。请注意,预期值和实际价值都是双打。
Assert.AreEqual(expectedValue, actualValue);
例外表明它们不等,阐述了“期望值:<6.8>实际值:<6.8>”。
预期值是硬编码的6.8,实际值是使用通过我们的分类方法(例如平等记录或Jenks自然中断)的数据库值来制定的。
我的猜测是,差异可能是,直到最小的位,这两个值的mantissas都相似。我更新了测试以包括一个epsilon,以查找两个值是否足够接近,但是我很好奇是否有办法强制曼蒂萨(Mantissa)与如果我显示该倍率的显示值匹配的显示值。这样的Mantissa校正是否存在?
解决方案
我不完全确定您的意思是强迫曼蒂萨匹配显示值... 是 没有双重值,例如,完全是0.1。
如果您想显示一些代码 精确的 但是,双重的价值,我有一个 doubleconverter.cs 使它变得容易的文件:
double d = 0.1;
string x = DoubleConverter.ToExactString(d);
另一个替代方法是在将双重转换为字符串时使用往返格式指定器(“ R”) - 保证结果具有足够的信息来以稍后再现相同的确切值。换句话说,如果 x != y
, , 然后 x.ToString("r") != y.ToString("r")
.
其他提示
您可以将两者转换为字符串: actualValue.ToString("0.000")
并比较这些弦。
这可以与您的要求密切匹配。
如果要测试默认显示值是否匹配是否匹配,只需比较默认显示值:
Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());
不隶属于 StackOverflow