У меня проблемы округления. У меня есть float, который я хочу округлить до сотых десятичных знаков. Тем не менее, я могу использовать только .round
, который в основном превращает его в int, то есть 2.34.round # => 2.
Есть ли простой способ сделать что-то вроде 2.3465 # => 2.35
Округление поплавка в Ruby
Ответ 1
При отображении вы можете использовать (например)
>> '%.2f' % 2.3465
=> "2.35"
Если вы хотите сохранить его округленным, вы можете использовать
>> (2.3465*100).round / 100.0
=> 2.35
Ответ 2
Передайте аргумент round, в котором число десятичных знаков округляется до
>> 2.3465.round
=> 2
>> 2.3465.round(2)
=> 2.35
>> 2.3465.round(3)
=> 2.347
Ответ 3
Вы можете добавить метод в Float Class, я узнал об этом из 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
Ответ 4
как насчет (2.3465*100).round()/100.0
?
Ответ 5
def rounding(float,precision)
return ((float * 10**precision).round.to_f) / (10**precision)
end
Ответ 6
вы можете использовать это для округления до точности.
//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
Ответ 7
Вы также можете указать отрицательное число в качестве аргумента методу 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
Ответ 8
Если вам просто нужно отобразить его, я бы использовал вспомогательный помощник number_with_precision.
Если вам это нужно в другом месте, я бы использовал, как указал Стив Вет, метод round
Ответ 9
Для 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