У меня проблемы с округлением. У меня есть число с плавающей точкой, которое я хочу округлить до сотых долей. Тем не менее, я могу использовать только то, .round
что в основном превращает его в int, то 2.34.round # => 2.
есть есть простой способ сделать что-то вроде2.3465 # => 2.35
ruby-on-rails
ruby
rounding
user211662
источник
источник
sprintf '%.2f', 2.3465
тоже работает.2.3000.round(2) => 2.3
иsprintf '%.2f', 2.300 => 2.30
. На мой взгляд, это недостаток в round (), или у него должна быть возможность сохранить конечные нули.2.3000.round(2)
- это число, а не строка. Число не2.3
может отличаться от указанного2.30
, поэтому нет возможности сохранить конечные нули. Вы можете создать свой собственный класс numbers_with_significance, но тогда у нас уже есть строки.'%.3f' % 1.2345
(3 знака после запятой, а не 2), однако !! То же самое и дляsprintf
. Осторожно. Это вернется=> 1.234
не так,=> 1.235
как многие ожидали бы (ау, после 2-го знака после спринта округляется на 5 вниз и только на 6 вверх). Вот почему вышеупомянутый комментарий Кит Хо имеет более 25 голосов. Безопаснее в использовании,'%.3f' % 1.2345.round(3)
поэтому.round
сначала нужно правильно округлить число , а затем отформатировать его (с нулями в конце, если это необходимо).Передать аргумент в раунд, содержащий число десятичных знаков, чтобы округлить до
источник
1.1.round(2)
=>1.1
нет1.10
Вы можете использовать это для округления до точного.
источник
Вы можете добавить метод в Float Class, я узнал об этом из stackoverflow:
источник
Вы также можете предоставить отрицательное число в качестве аргумента
round
метода для округления до ближайшего кратного 10, 100 и так далее.источник
источник
о чем
(2.3465*100).round()/100.0
?источник
Если вам просто нужно отобразить его, я бы использовал помощник number_with_precision . Если вам это нужно где-то еще, я бы использовал, как указал Стив Уит,
round
методисточник
number_with_precision
это метод Rails-only.Для ruby 1.8.7 вы можете добавить следующее в ваш код:
источник