我正在尝试从double中获取小数部分,以下是我的代码:
double decimalvalue = 23423.1234-23423.0;
0.12340000000040163
但是在减法之后,我期望 decimalvalue 的值为 0.1234,但实际上它的值是 0.12340000000040163。请帮助我理解这种行为,是否有任何解决方法。
我正在尝试从double中获取小数部分,以下是我的代码:
double decimalvalue = 23423.1234-23423.0;
0.12340000000040163
但是在减法之后,我期望 decimalvalue 的值为 0.1234,但实际上它的值是 0.12340000000040163。请帮助我理解这种行为,是否有任何解决方法。
我建议您查看以下内容:
浮点数中可以指定有限数量的值,但在表示范围内存在无限数量的浮点数。
因此,某些浮点数不能在任何浮点/双精度样式的数据类型中准确表示。
处理您特定问题的典型方法是避免直接进行相等性比较,而是进行epsilon测试:查看预期值和计算值是否彼此相差一些小数(与被减数相比),称为 epsilon 。
与之间接相关的概念是机器epsilon的概念,值得完全理解。
==
要糟糕得多。学习浮点数的工作原理,不要试图用破坏传递性的技巧来隐藏它。 - Pete Becker