web-dev-qa-db-fra.com

Définir la précision d'affichage d'un float en Ruby

Est-il possible de régler la précision d'affichage d'un float en Ruby?

Quelque chose comme:

z = 1/3
z.to_s    #=> 0.33333333333333
z.to_s(3) #=> 0.333
z.to_s(5) #=> 0.33333

Ou dois-je remplacer la méthode to_s de Float?

55
salt.racer

z.round(2) ou x.round(3) est la solution la plus simple. Voir http://www.Ruby-doc.org/core-1.9.3/Float.html#method-i-round .

Cela dit, cela ne fera que garantir que le nombre de chiffres est limité. Dans le cas d'un tiers, c'est bien, mais si vous aviez dit 0.25.round(3), vous obtiendrez 0,25, pas 0,250.

76
DrewB

Vous pouvez utiliser sprintf:

sprintf( "%0.02f", 123.4564564)
42
Andreas Bonini

Je ferais normalement juste la conversion en code ouvert, quelque chose comme:

puts "%5.2f" % [1.0/3.0] 

Ruby appelle Kernel # format pour des expressions comme celle-ci, car String comporte un opérateur core% défini . Pensez-y comme printf pour Ruby si cela vous dit quelque chose.

35
DigitalRoss

Vous pouvez utiliser des options 

z = #{'%.3f' % z}
0
Lucas Alencar