187

如何在 JRuby(1.6.x) 中将浮点数舍入到小数点后 2 位?

number = 1.1164
number.round(2)

# The above shows the following error
# wrong number of arguments (1 for 0)
4

6 回答 6

321
(5.65235534).round(2)
#=> 5.65
于 2013-02-28T09:29:47.423 回答
229

sprintf('%.2f', number)是一种神秘但非常强大的数字格式化方式。结果始终是一个字符串,但是由于您正在四舍五入,我假设您这样做是为了演示目的。sprintf几乎可以以任何你喜欢的方式格式化任何数字,还有更多。

完整的 sprintf 文档:http ://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf

于 2012-05-10T20:45:49.427 回答
93

Float#round 可以在 Ruby 1.9 中使用参数,而不是在 Ruby 1.8 中。JRuby 默认为 1.8,但它能够在 1.9 模式下运行

于 2012-05-05T16:06:23.323 回答
6

编辑

得到反馈后,原来的解决方案似乎不起作用。这就是为什么将答案更新为建议之一的原因。

def float_of_2_decimal(float_n) 
  float_n.to_d.round(2, :truncate).to_f
end

如果您想获得小数点后 2 位的四舍五入数字,其他答案可能会起作用。但是,如果您想获得前两位小数的浮点数而不进行四舍五入,那么这些答案将无济于事。

因此,为了获得前两位小数的浮点数,我使用了这种技术。在某些情况下不起作用

def float_of_2_decimal(float_n)
  float_n.round(3).to_s[0..3].to_f
end

5.666666666666666666666666它将返回5.66而不是四舍五入5.67。希望它会帮助某人

于 2016-04-05T18:30:37.010 回答
-6

试试这个:

module Util
module MyUtil



    def self.redondear_up(suma,cantidad, decimales=0)

        unless suma.present?
            return nil
        end


        if suma>0
            resultado= (suma.to_f/cantidad)
            return resultado.round(decimales)
        end


        return nil


    end

end 
end 
于 2016-09-29T17:06:12.840 回答
-16

为了截断小数,我使用了以下代码:

<th><%#= sprintf("%0.01f",prom/total) %><!--1dec,aprox-->
    <% if prom == 0 or total == 0 %>
        N.E.
    <% else %>
        <%= Integer((prom/total).to_d*10)*0.1 %><!--1decimal,truncado-->
    <% end %>
        <%#= prom/total %>
</th>

如果要截断为 2 位小数,则应使用Integr(a*100)*0.01

于 2014-01-16T00:12:41.077 回答