首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以拼音表示的浮点数精度

以拼音表示的浮点数精度
EN

Stack Overflow用户
提问于 2012-09-22 15:50:33
回答 2查看 212关注 0票数 1

我正在写一个使用浮点数的ruby程序。我在精确度方面有问题。例如

代码语言:javascript
复制
1.9.3p194 :013 > 113.0 * 0.01
# => 1.1300000000000001

因此

代码语言:javascript
复制
1.9.3p194 :018 > 113 * 0.01 == 1.13
# => false

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

这是意料之中的吗?我该如何处理这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-22 16:09:28

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

代码语言:javascript
复制
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 
票数 4
EN

Stack Overflow用户

发布于 2012-09-22 15:53:43

在使用浮点数进行计算时,你应该使用sigma方法-这意味着不比较两个值,而是将它们的绝对差与非常小的值- 1e-10进行比较。

代码语言:javascript
复制
((113 * 0.01) - 1.13).abs<1e-10
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12541907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档