我打算用步长 0.05 生成一个从 0.05 到 0.95 的数组,就像 0.05, 0.1, 0.15, 0.2, ...
.但是下面的代码有一些精度问题:
scala> 0.05 to 0.95 by 0.05
res11: scala.collection.immutable.NumericRange[Double] = NumericRange(0.05, 0.1, 0.15000000000000002, 0.2, 0.25, 0.3, 0.35, 0.39999999999999997, 0.44999999999999996, 0.49999999999999994, 0.5499999999999999, 0.6, 0.65, 0.7000000000000001, 0.7500000000000001, 0.8000000000000002, 0.8500000000000002, 0.9000000000000002)
谁能给我一些关于如何解决这个问题的想法?谢谢。
最佳答案
如果您需要精确的十进制计算,实际可靠的方法是使用 BigDecimal
:
BigDecimal("0.05") to BigDecimal("0.95") by BigDecimal("0.05")
它要慢得多,因此在某些情况下是 Not Acceptable ,但这就是在现代计算机上使用小数的现实。
关于 float 步长的标度范围精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607402/