Is the double data type not suitable for my data / calculation?
本问题已经有最佳答案,请猛点这里访问。
由于这个原因,我的单元测试失败了,所以我想知道我是否使用了正确的数据类型?
读到双人床的规格,我想应该没问题,但这就是发生的事情:
我正在从一个文件中读取一个值为
然后我把它转换成一个双精度数,然后乘以10000。
进行乘法运算的函数是:
1 2 3 4 5 6 7 8 | private static double? MultiplyBy10000(double? input) { if (!input.HasValue) { return null; } return input.Value*10000; } |
下一个是从即时窗口:
1 2 3 4 | input.Value 0.0175 input.Value*10000 175.00000000000003 |
号
这就是我的单元测试失败的地方,因为我期望175。
这个双精度不够吗?
也检查了其他值:
1 2 3 4 5 6 7 8 9 10 | input.Value*1 0.0175 input.Value*10 0.17500000000000002 input.Value*100 1.7500000000000002 input.Value*1000 17.5 input.Value*10000 175.00000000000003 |
奇怪的是,我有12个测试案例00155002250016001750009500160016002250023500265
断言其中4个,其他3个没有这种行为
Is the double not accurate enough for this?
号
不,双精度数是浮点数,设计上不准确。您可以使用
小数点右边的值不是2的幂的浮点数无法准确表示。虽然你得到了0.0175的数据,但实际上还有更多的数据。
放大数字后,使用math.round将小数点右边的日期去掉。