如何在 JRuby(1.6.x) 中将浮点数舍入到小数点后 2 位?
number = 1.1164
number.round(2)
# The above shows the following error
# wrong number of arguments (1 for 0)
(5.65235534).round(2)
#=> 5.65
sprintf('%.2f', number)
是一种神秘但非常强大的数字格式化方式。结果始终是一个字符串,但是由于您正在四舍五入,我假设您这样做是为了演示目的。sprintf
几乎可以以任何你喜欢的方式格式化任何数字,还有更多。
完整的 sprintf 文档:http ://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
Float#round 可以在 Ruby 1.9 中使用参数,而不是在 Ruby 1.8 中。JRuby 默认为 1.8,但它能够在 1.9 模式下运行。
得到反馈后,原来的解决方案似乎不起作用。这就是为什么将答案更新为建议之一的原因。
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
。希望它会帮助某人
试试这个:
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
为了截断小数,我使用了以下代码:
<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