Ошибка округления значений с помощью .round в Ruby - PullRequest
1 голос
/ 01 мая 2010

Следующий фрагмент кода отлично работает в скрипте / консоли, но возвращает следующую ошибку при компиляции в скрипте 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 ]

1 голос
/ 01 мая 2010

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

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

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

0 голосов
/ 01 мая 2010

Судя по всему, вы не должны передавать аргумент методу round. Вы прошли 5 к нему.
Если вы пытаетесь округлить его до 5 десятичных знаков, для этого нет встроенного метода (о котором я знаю). На этой странице объясняется, как это сделать: http://solutions.hans -eric.com / округление числа с плавающей точкой в ​​рубине

...