.net - C# .Net 双问题... 6.8 != 6.8?

标签 .net floating-accuracy error-correction

我在工作中进行了一些单元测试,其中一个断言出现了一个特殊的错误。请注意,expectedValue 和actualValue 都是 double 值。

Assert.AreEqual(expectedValue, actualValue);

异常表明它们不相等,详细说明了“期望值:<6.8>实际值:<6.8>。”

预期值是硬编码的 6.8,实际值是使用数据库值通过我们的分类方法(例如 Equal Records 或 Jenks Natural Breaks)制定的。

我的猜测是,差异可能是两个值的尾数相似,直到最低有效位。我更新了测试以包含 epsilon 来查找这两个值是否足够接近,但我很好奇是否有一种方法可以强制尾数与我显示该 double 的显示值匹配。这样的尾数修正是否存在?

最佳答案

我不完全确定强制尾数与显示值匹配是什么意思...例如,没有恰好为 0.1 的 double 值。

如果你想要一些代码来显示 double 值的精确值,但是,我有一个 DoubleConverter.cs文件,这使得这很容易:

 double d = 0.1;
 string x = DoubleConverter.ToExactString(d);

另一种替代方法是在将 double 型转换为字符串时使用往返格式说明符(“r”) - 这可以保证结果有足够的信息来稍后重现相同的精确值。换句话说,如果 x != y,则 x.ToString("r") != y.ToString("r")

关于.net - C# .Net 双问题... 6.8 != 6.8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3495237/

相关文章:

c++ - 重复流的纠错

c# - 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围错误

c# - 如何使用 C# 清除网络接口(interface) (nic) 的默认网关

java - 对 float 或 double 值执行重复加法会产生意外结果

r - 为什么这些数字不相等?

algorithm - 哪种算法适用于极高的非突发错误?

c# - C#推文推荐算法

c# - 实现动态对象从LINQ to XML select查询的捷径?

math - float 学有问题吗?

algorithm - 二维码生成算法实现案例分析