gpt4 book ai didi

ruby - ruby 中的浮点精度

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:34 24 4
gpt4 key购买 nike

我正在编写一个使用 float 的 ruby​​ 程序。我在精度方面遇到了麻烦。例如

1.9.3p194 :013 > 113.0 * 0.01
# => 1.1300000000000001

因此

1.9.3p194 :018 > 113 * 0.01 == 1.13
# => false

这正是我的应用需要正确计算的类型。

这是预期的吗?我应该如何处理这个问题?

最佳答案

这是 float 的固有限制(即使 0.01 也没有精确的二进制浮点表示)。您可以使用 Aleksey 提供的技术,或者如果您想要完美的精度,可以使用 ruby​​ 中捆绑的 BigDecimal 类。它更冗长,更慢,但它会给出正确的结果:

require 'bigdecimal'
=> true
1.9.3p194 :003 > BigDecimal.new("113") * BigDecimal("0.01")
=> #<BigDecimal:26cefd8,'0.113E1',18(36)>
1.9.3p194 :004 > BigDecimal.new("113") * BigDecimal("0.01") == BigDecimal("1.13")
=> true

关于ruby - ruby 中的浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com