web-dev-qa-db-ja.com

フロートの表示精度をRubyで設定します

Rubyでフロートの表示精度を設定することは可能ですか?

何かのようなもの:

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

または、Floatto_sメソッドをオーバーライドする必要がありますか?

55
salt.racer

z.round(2)またはx.round(3)が最も簡単なソリューションです。 http://www.Ruby-doc.org/core-1.9.3/Float.html#method-i-round を参照してください。

とは言っても、それはその数字以下であることを保証するだけです。 1/3の場合は問題ありませんが、0.25.round(3)と言った場合、0.250ではなく0.25になります。

78
DrewB

Sprintfを使用できます。

sprintf( "%0.02f", 123.4564564)
43
Thomas Bonini

私は通常、次のようなオープンコードで変換を行います:

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

Rubyは、このような式に対して Kernel#format を呼び出します。これは、Stringに core operator%defined が含まれているためです。 Rubyのprintfと考えてください。

35
DigitalRoss

プットを使用できます

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