当前位置:  开发笔记 > 编程语言 > 正文

Clojure:减法中的舍入不一致

如何解决《Clojure:减法中的舍入不一致》经验,为你挑选了1个好方法。

我正在研究一段代码,其中数字相等是几个逻辑条件中的一个重要因素.Clojure正在做一些我不太了解的事情.例如:

user=> (- 5 4.9)
0.09999999999999964
user=> (- 5 4.8)
0.20000000000000018
user=> (- 5 2.9)
2.1
user=> (- 5 2.7)
2.3
user=> (- 5 2.8)
2.2
user=> (- 9 6.9)
2.0999999999999996 
user=> (- 9 2.9)
6.1

在某些情况下,Clojure数字似乎将减法理解为0.1,而在其他情况下则不然.这里发生了什么?



1> uselpa..:

默认情况下,这些结果表示为小数,具有固有的舍入误差.您可以通过后缀字母M切换到使用BigDecimals:

user=> (- 5M 4.9M)
0.1M
user=> (- 5M 4.8M)
0.2M
user=> (- 9M 6.9M)
2.1M
user=> (- 9M 2.9M)
6.1M

要对十进制变量执行相同操作,请使用bigdec形式:

user=> (def k 4.9)
#'user/k
user=> (- 5M k)
0.09999999999999964
user=> (- 5M (bigdec k))
0.1M

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有