繁体   English   中英

BigDecimal to_s与to_f不匹配

[英]BigDecimal to_s does not match to_f

BigDecimal类是否已损坏? 似乎永远不会发生以下情况:注意a.to_f!= a.to_s.to_f

a.class => BigDecimal

a.to_f => 18658.1072928

a.to_s =>“10865.81072928”

b.class => BigDecimal

b.to_f => 10000.0

b.to_s =>“10000.0”

(a - b).to_f => 865.81072928

a.to_f - b.to_f => 8658.1072928

关于可能出错的任何想法? 我们在服务器上运行ruby 1.8.7p72,在本地机器上运行1.8.7p173。

如果您运行的是Mac OS X 10.6.3,那么这可能是一个解释: http//www.abletech.co.nz/2010/03/osx-10-6-3-installs-new-ruby-with-故障-的BigDecimal /

要摆脱这个问题,你可以使用RVM

正如文档所说:

to_f

返回一个新的Float对象,其值与BigDecimal数字大致相同。 适用二进制浮点运算的正常精度限制和内置错误。

这意味着Ruby中的Float就像一个浮动的地方: http//en.wikipedia.org/wiki/Floating_point#Accuracy_problems

并非每个数字都可以由Float表示。 在这种情况下,数字是四舍五入的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM