60

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

何かのようなもの:

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

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

4

5 に答える 5

89

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 になると言うと、

于 2012-08-06T23:31:02.547 に答える
48

sprintfを使用できます。

sprintf("%0.02f", 123.4564564)
于 2009-12-19T19:52:35.097 に答える
36

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

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

Ruby は、このような式に対してKernel#formatを呼び出します。これは、String にコア演算子 % が定義されているためです。ベルが鳴る場合は、Ruby の printf と考えてください。

于 2009-12-19T22:30:14.867 に答える
2

プットが使える

z = #{'%.3f' % z}
于 2017-09-20T12:45:39.943 に答える