3

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。

4

2 回答 2

1

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

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

于 2010-04-02T20:01:35.903 回答
0

正如文档所说:

to_f

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

这意味着红宝石中的浮点数在任何地方都表现得像浮点数:http ://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

并非每个数字都可以用浮点数表示。在这种情况下,数字会四舍五入。

于 2010-04-01T22:33:19.423 回答