JRuby 1.6.x. Как вы округлите число до запятой в jruby?
number = 1.1164
number.round(2)
The above shows the following error
wrong number of arguments (1 for 0)
Как мне округлить это до 2 десятичных знаков?
Float # round может принимать параметр в Ruby 1.9, а не в Ruby 1.8. По умолчанию JRuby равен 1.8, но он может работать в режиме 1.9 .
источник
(5.6).round(2)
возвращается только 5,6sprintf('%.2f', number)
это загадочный, но очень мощный способ форматирования чисел. Результатом всегда является строка, но так как вы округляете, я предполагаю, что вы все равно делаете это для целей презентации.sprintf
можно форматировать любое число практически любым удобным вам способом и многое другое.Полная документация по sprintf: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
источник
'%.2f' % number
Также работы чаще можно увидеть, по крайней мере, по моему опыту.sprintf
(илиformat
)%
версии. Некоторые рассуждения об этом обсуждаются здесь , в основном о читабельности. Не то чтобы мы все следовали руководству по стилю, просто приводя некоторые причины :)0.566666666666666
округляет до0.57
"%.2f"
округляет5
, а не вверх, есть ли способ это исправить?редактировать
После получения отзыва кажется, что оригинальное решение не сработало. Вот почему обновил ответ в качестве одного из предложений.
Другие ответы могут работать, если вы хотите иметь округленные числа 2 десятичных знака. Но, если вы хотите иметь числа с плавающей запятой с первыми двумя десятичными знаками без округления , эти ответы не помогут.
Итак, чтобы получить число с плавающей запятой с первыми двумя десятичными знаками, я использовал эту технику. Не работает в некоторых случаях
с
5.666666666666666666666666
, он вернется5.66
вместо округленного5.67
. Надеюсь, это поможет кому-тоисточник
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
Или гораздо проще, вы можете использоватьfloat_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
качестве входных данных первый показывает,1.11
а второй показывает1.11111111111111e+16
Попробуй это:
источник
чтобы усечь десятичное число, я использовал следующий код:
Если вы хотите сократить до 2 десятичных знаков, вы должны использовать
Integr(a*100)*0.01
источник