我有一个像30.6355这样代表金钱的数值,如何舍入到2位小数?

Bla*_*man 4 ruby decimal rounding

我有一个像30.6355这样代表金钱的数值,如何舍入到2位小数?

luc*_*oli 20

不应该使用doublefloat与货币打交道时类型:他俩都太多小数和偶尔的舍入误差.金钱可以通过这些漏洞落下,并且在发生错误之后追踪错误将很难.

处理货币时,请使用固定的十进制类型.在Ruby(和Java)中,使用BigDecimal.

  • 实际上,最大的问题是它们根本没有任何小数位*,它们有*二进制*位置. (8认同)

Ree*_*ore 13

Ruby 1.8:

class Numeric
    def round_to( places )
        power = 10.0**places
        (self * power).round / power
    end
end

(30.6355).round_to(2)
Run Code Online (Sandbox Code Playgroud)

Ruby 1.9:

(30.6355).round(2)
Run Code Online (Sandbox Code Playgroud)

在1.9中,round可以舍入到指定的位数.