web-dev-qa-db-ja.com

どうやってjrubyの小数点以下2桁にfloatを丸める

JRuby 1.6.xどうやってjrubyの小数位に浮動小数点数を四捨五入するのですか。

number = 1.1164
number.round(2)

The above shows the following error
wrong number of arguments (1 for 0)

これを小数点以下2桁に丸めるにはどうすればよいですか?

157
Sam

Float#roundは、Ruby 1.8ではなく、Ruby 1.9ではパラメータを取ることができます。 JRubyのデフォルトは1.8ですが、 1.9モードでの動作 が可能です。

85
steenslag
(5.65235534).round(2)
#=> 5.65
263
boulder_ruby

sprintf('%.2f', number)は不可解ですが数字をフォーマットする非常に強力な方法です。結果は常に文字列ですが、四捨五入しているので、とにかくプレゼンテーションを目的としていると思います。 sprintfは、好きなように任意の数をフォーマットできます。

完全なsprintfドキュメント: http://www.Ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf

176
Theo

編集する

フィードバックを得た後、それはオリジナルの解決策がうまくいかなかったようです。そのため、提案の1つとして回答を更新しました。

def float_of_2_decimal(float_n) 
  float_n.to_d.round(2, :truncate).to_f
end

小数点以下2桁の四捨五入したい場合は、他の答えでうまくいくかもしれません。しかし、小数点以下2桁の浮動小数点数を丸めずにしたい場合は、これらの答えは役に立ちません。

だから、最初の小数点以下2桁の浮動小数点数を得るために、私はこのテクニックを使いました。 いくつかのケースでは動作しません

def float_of_2_decimal(float_n)
  float_n.round(3).to_s[0..3].to_f
end

5.666666666666666666666666を指定すると、丸められた5.66の代わりに5.67を返します。誰かに役立つことを願っています

1
Anwar