应用操作后,大整数会改变它们的值

时间:2017-02-10 07:04:38

标签: ruby floating-point integer

以下是我脚本中的一小段代码:

添加的逻辑是根据比例值隐藏任何数据值

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

任何人都可以帮助我为什么价值在变化以及如何解决它?

1 个答案:

答案 0 :(得分:0)

  

上述情况下的预期输出为114000002066334588

完全没有。

人们不能指望浮点运算是精确的。这只是不是这种情况 because of processor architecture。在所有语言中,没有例外,有精确处理小数的变通方法。在ruby中它是BigDecimal

require 'bigdecimal'

BigDecimal("11400000206633458812") / 100
#⇒ 0.11400000206633458812E18

(BigDecimal("11400000206633458812") / 100).to_i
#⇒ 114000002066334588