2010-05-01 1 views
1

Следующий фрагмент кода работает отлично в сценарий/консоли, но возвращает следующую ошибку, когда я скомпилировать же в рубинового скрипте .:Ошибка округления значений с помощью .round в Рубине

: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))}} 

Есть идеи? Приветствия!

ответ

1

Float#round, кажется, работает по-разному в Ruby 1.8 и Ruby 1.9: 1.8 жалуется данному аргументу, в 1.9 возвращается обратно поплавок правильно округленное до заданного числа знаков после запятой.

Но, как article связаны в другой ответ мудро говорит:

вы должны рассмотреть причины вы выполнять округление (или эквивалент) операции. Если причина для объясняется только лучшим способом, то может использовать строку формата вместо этого и оставить исходные данные неповрежденными.

0

Из чего бы то ни было, вы не должны передавать аргумент методу round. Вы прошли через 5.
Если вы пытаетесь округлить его до 5 знаков после запятой, для этого не существует встроенного метода (о котором я знаю). Это страница, которая объясняет, как это сделать так: http://solutions.hans-eric.com/rounding-off-floating-point-numbers-in-ruby

+0

Мне нужно округлить каждое число до 5 знаков после запятой. И интересно тот же кусок кода РАБОТАЕТ в консоли! – Shreyas

+0

Это интересно. Я отредактировал, чтобы включить ссылку, которая поможет вам. – bennybdbc