J'ai des problèmes d'arrondi. J'ai un flotteur, que je veux arrondir au centième d'une décimale. Cependant, je ne peux pas utiliser .round
qui transforme essentiellement en un int, ce qui signifie 2.34.round # => 2.
est-il un moyen simple effet de faire quelque chose comme 2.3465 # => 2.35
Flotteur arrondi en Ruby
Répondre
Lors de l'affichage, vous pouvez utiliser (par exemple)
>> '%.2f' % 2.3465
=> "2.35"
Si vous voulez stocker arrondi, vous pouvez utiliser
>> (2.3465*100).round/100.0
=> 2.35
grande réponse merci, je savais qu'il y avait un moyen simple de faire il. – user211662
Merci. Je ne me suis pas rendu compte que sprintf prendrait soin d'arrondir pour moi. 'sprintf '% .2f', 2.3465' fonctionne également. –
value.round (2) est meilleur que cette solution –
Qu'en est-il (2.3465*100).round()/100.0
?
Passer un argument pour arrondir contenant le nombre de décimales à arrondir
>> 2.3465.round
=> 2
>> 2.3465.round(2)
=> 2.35
>> 2.3465.round(3)
=> 2.347
Cela semblerait plus judicieux que de multiplier, arrondir et diviser. +1 –
Hmm cette méthode ne semble pas être en rubis 1.8.7. Peut-être en 1.9? –
@Brian. Ceci est certainement dans 1.9 et est également dans les rails (Avec laquelle cette question a été taguée) –
Vous pouvez ajouter une méthode dans la classe de flotteur, je l'ai appris 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
def rounding(float,precision)
return ((float * 10**precision).round.to_f)/(10**precision)
end
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
Si vous avez juste besoin de l'afficher, j'utiliserais l'assistant number_with_precision. Si vous avez besoin d'un autre endroit, j'utiliser, comme Steve Weet a, la méthode round
Notez que 'number_with_precision' est la méthode Rails-only. – Smar
Vous pouvez également fournir un nombre négatif comme argument à la méthode round
pour arrondir au plus proche multiple de 10, 100 et ainsi de suite .
# 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
vous pouvez l'utiliser pour arrondir à un 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