在jruby中,如何将浮点数四舍五入到小数点后两位

JRuby 1.6.x. 你如何在jruby中将浮点数舍入到小数位数。

number = 1.1164 number.round(2) The above shows the following error wrong number of arguments (1 for 0) 

我怎么把这个小数点后两位?

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

 (5.65235534).round(2) #=> 5.65 

sprintf('%.2f', number)是一个神秘的,但非常强大的格式化数字的方式。 结果总是一个string,但是因为你是四舍五入的,所以我认为你是为了演示目的而做的。 sprintf可以以任何你喜欢的方式格式化任何数字,还有更多。

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

编辑

得到反馈后,似乎原来的解决scheme没有工作。 这就是为什么更新答案作为其中一个build议。

 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 %> NE <% else %> <%= Integer((prom/total).to_d*10)*0.1 %><!--1decimal,truncado--> <% end %> <%#= prom/total %> </th> 

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