J'ai des problèmes d'arrondi. J'ai un flotteur que je veux arrondir au centième de décimale. Cependant, je ne peux utiliser que .round
qui le transforme en un int, ce qui signifie 2.34.round # => 2.
Existe-t-il un moyen simple d’utiliser un effet comme 2.3465 # => 2.35
Lors de l'affichage, vous pouvez utiliser (par exemple)
>> '%.2f' % 2.3465
=> "2.35"
Si vous voulez le stocker arrondi, vous pouvez utiliser
>> (2.3465*100).round / 100.0
=> 2.35
Passer un argument à arrondir contenant le nombre de décimales à arrondir à
>> 2.3465.round
=> 2
>> 2.3465.round(2)
=> 2.35
>> 2.3465.round(3)
=> 2.347
vous pouvez l'utiliser pour arrondir avec précision ..
//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
Vous pouvez ajouter une méthode dans Float Class, j'ai appris cela de 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
Vous pouvez également fournir un nombre négatif en tant qu'argument à la méthode round
pour arrondir au multiple le plus proche de 10, 100, etc.
# 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
qu'en est-il de (2.3465*100).round()/100.0
?
def rounding(float,precision)
return ((float * 10**precision).round.to_f) / (10**precision)
end
Si vous avez juste besoin de l'afficher, j'utiliserais l'aide number_with_precision . Si vous en avez besoin quelque part, j'utiliserais, comme l'a souligné Steve Weet, la méthode round
Pour Ruby 1.8.7 vous pouvez ajouter ce qui suit à votre code:
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