大家好,欢迎来到IT知识分享网。
从一个经典例子谈起:
js语言示例: var f1 = 0.1; var f2 = 0.2; console.log(f1+f2); // 您认为结果是0.3? 真实结果是 0.000004 java语言示例: public static void main(String[] args) { double d1 = 0.1; double d2 = 0.2; System.out.println(d1+d2); //您认为结果是0.3? 真实结果是: 0.000004 }
上述两个算数的和,为什么不是0.3呢?就是因为“浮点数精度丢失”问题造成的。
“浮点数精度丢失”问题产生的原因
根本原因:0.1这个十进制小数并不能很好的被二进制表示.
为什么0.1不能被二进制表示呢?
……..
聪明的你,应该已经发现了,这个算法过程是无限循环的,
因此可以得出结论:浮点数转二进制会有精度丢失问题
“浮点数精度丢失”问题的解决
具体解决方案,跟具体业务场景(上下文)有一定的关系。
(因为不同的解决方案,对应的成本不同,毕竟,这个世界上本就不存在“放之四海而皆准”的真理啊^_^)
解决方案:
比较两个浮点数是否相等,需要通过两者之差的绝对值是否小于某个阈值来判断。
场景2:金融/财务模块的金额或费用计算
解决方案:

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/180283.html