在Ruby中使用.round舍入值时出错

时间:2010-05-01 04:41:34

标签: ruby floating-point rounding

以下代码在脚本/控制台中运行良好,但在ruby脚本中编译时会返回以下错误。:

:in `round': wrong number of arguments (1 for 0) (ArgumentError)

tf={"ph"=>{0=>1.33333333333333, 1=>1.5}, "fee"=>{0=>1.66666666666667}, "test"=>{0=>1.16666666666667, 1=>1.25}, "what"=>{0=>2.0, 1=>2.0}, "for"=>{0=>1.5}, "is"=>{0=>1.83333333333333, 1=>1.75}}

tf.each{|k,v| v.each{|k1,v1| tf[k][k1]=(v1.round(5))}}

任何想法?干杯!

2 个答案:

答案 0 :(得分:1)

Float#round似乎在Ruby 1.8Ruby 1.9中的工作方式不同:在1.8中它抱怨给定的参数,在1.9中返回浮动正确舍入到给定的小数位数。

但是,正如另一个答案所链接的article明智地说:

  你应该考虑你的原因   执行舍入(或   等效)操作。如果是的话   介绍原因只是一种更好的方式   可能是使用格式字符串   相反,并保留原始数据   完好。

答案 1 :(得分:0)

从它看起来,你不应该将参数传递给round方法。你已经通过5了。
如果你试图将它舍入到5位小数,那么就没有内置方法(我知道)。这是一个解释如何执行此操作的页面:http://solutions.hans-eric.com/rounding-off-floating-point-numbers-in-ruby

相关问题