У меня проблемы округления. У меня есть float, который я хочу округлить до сотых десятичных знаков. Тем не менее, я могу использовать только .round
, который в основном превращает его в междунар, что означает 2.34.round # => 2.
Есть ли простой эффект способ сделать что-то вроде 2.3465 # => 2.35
Округление поплавка в рубине
ответ
При отображении, можно использовать (например)
>> '%.2f' % 2.3465
=> "2.35"
Если вы хотите сохранить его округленным, вы можете использовать
>> (2.3465*100).round/100.0
=> 2.35
большой ответ спасибо, я знал, что есть простой способ сделать Это. – user211662
Спасибо. Я не понимал, что спринтф позаботится обо мне. 'sprintf '% .2f', 2.3465' также работает. –
value.round (2) лучше, чем это решение –
что относительно (2.3465*100).round()/100.0
?
Передает аргумент округлять, содержащий количество десятичных знаков после запятой округлить
>> 2.3465.round
=> 2
>> 2.3465.round(2)
=> 2.35
>> 2.3465.round(3)
=> 2.347
Это кажется более разумным, чем умножение, округление и деление. +1 –
Хмм этот метод, похоже, не в рубине 1.8.7. Может быть, в 1.9? –
@Brian. Это определенно в 1.9, а также в рельсах (для которых этот вопрос был отмечен). –
Вы можете добавить метод в Float классе, я узнал об этом из StackOverflow:
class Float
def precision(p)
# Make sure the precision level is actually an integer and > 0
raise ArgumentError, "#{p} is an invalid precision level. Valid ranges are integers > 0." unless p.class == Fixnum or p < 0
# Special case for 0 precision so it returns a Fixnum and thus doesn't have a trailing .0
return self.round if p == 0
# Standard case
return (self * 10**p).round.to_f/10**p
end
end
def rounding(float,precision)
return ((float * 10**precision).round.to_f)/(10**precision)
end
Для ruby 1.8.7 вы можете добавить в код код:
class Float
alias oldround:round
def round(precision = nil)
if precision.nil?
return self
else
return ((self * 10**precision).oldround.to_f)/(10**precision)
end
end
end
Если вам просто нужно его отобразить, я бы использовал вспомогательный помощник number_with_precision. Если вам это нужно где-то еще я хотел бы использовать, как указано Стив Weet, метод round
Обратите внимание, что 'number_with_precision' - это метод только для Rails. – Smar
Вы также можете предоставить отрицательное число в качестве аргумента методу round
округление до ближайшего числа, кратного 10, 100 и так далее ,
# Round to the nearest multiple of 10.
12.3453.round(-1) # Output: 10
# Round to the nearest multiple of 100.
124.3453.round(-2) # Output: 100
вы можете использовать это для округления до Precison ..
//to_f is for float
salary= 2921.9121
puts salary.to_f.round(2) // to 2 decimal place
puts salary.to_f.round() // to 3 decimal place
'2.3465.round (2) => 2.35' – Magne