以下是我脚本中的一小段代码:
添加的逻辑是根据比例值隐藏任何数据值
x = "11400000206633458812"
scale = 2
x = x.to_f/10**scale.to_i
x = x == x.to_i ? x.to_i : x
puts x
观察到该值为“114000002066334592”
与x的初始值不同。
我的测试点此时失败了。
x可以是任何值。如果我使用x = 156,输出是正确的,但当整数的长度超过16位时,就会出现问题。
上述情况下的预期产量为114000002066334588
任何人都可以帮助我为什么价值在变化以及如何解决它?
答案 0 :(得分:0)
上述情况下的预期输出为
114000002066334588
完全没有。
人们不能指望浮点运算是精确的。这只是不是这种情况 because of processor architecture。在所有语言中,没有例外,有精确处理小数的变通方法。在ruby中它是BigDecimal
:
require 'bigdecimal'
BigDecimal("11400000206633458812") / 100
#⇒ 0.11400000206633458812E18
(BigDecimal("11400000206633458812") / 100).to_i
#⇒ 114000002066334588