Une question rapide. J'écris:Sprintf dans Ruby
puts "%.3f %.4f %.5f" % [3.998877, 3.998877, 3.998877]
et obtenir la sortie suivante:
3.999 3.9989 3.99888
sprintf arrondit simplement les chiffres. Comment puis-je limiter cet arrondi?
Une question rapide. J'écris:Sprintf dans Ruby
puts "%.3f %.4f %.5f" % [3.998877, 3.998877, 3.998877]
et obtenir la sortie suivante:
3.999 3.9989 3.99888
sprintf arrondit simplement les chiffres. Comment puis-je limiter cet arrondi?
>> 3.998877.to_s[/^\d+\.\d{3}/].to_f
=> 3.998
>> 3.998877.to_s[/^\d+\.\d{4}/].to_f
=> 3.9988
vous aurez probablement besoin de tronquer les chiffres à la précision que vous voulez.
f = 3.1919183
puts (f * 1000).truncate()/1000
Pour obtenir les nombres tels quels, vous devez les stocker sous forme de chaînes. Dès que vous les représentez comme des flotteurs, vous perdez des informations sur la quantité de précision intégrée.
Pourquoi ne pas les stocker comme des nombres rationnels à la place? –
dépend de ce que vous voulez faire avec eux plus tard, je suppose. – Peter
>> def truncN f, digits
>> t = 10.0 ** digits
>> "%.#{digits}f" % ((f * t).truncate/t)
>> end
=> nil
>> n
=> 1.11181111
>> "%.3f" % n
=> "1.112"
>> truncN n, 3
=> "1.111"
Pas mauvaise solution – gmile