187

JRuby(1.6.x)で浮動小数点数を小数点以下第2位に四捨五入するにはどうすればよいですか?

number = 1.1164
number.round(2)

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

6 に答える 6

321
(5.65235534).round(2)
#=> 5.65
于 2013-02-28T09:29:47.423 に答える
229

sprintf('%.2f', number)は不可解ですが、数値をフォーマットする非常に強力な方法です。結果は常に文字列ですが、丸めているので、プレゼンテーションの目的でそれを行っていると思います。sprintf任意の数値をほぼ任意の方法で書式設定できます。

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

于 2012-05-10T20:45:49.427 に答える
93

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

于 2012-05-05T16:06:23.323 に答える
6

編集

フィードバックを得た後、元のソリューションが機能しなかったようです。そのため、回答を提案の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

を使用すると、 rounded の代わりに5.666666666666666666666666返されます。それが誰かを助けることを願っています5.665.67

于 2016-04-05T18:30:37.010 に答える
-6

これを試して:

module Util
module MyUtil



    def self.redondear_up(suma,cantidad, decimales=0)

        unless suma.present?
            return nil
        end


        if suma>0
            resultado= (suma.to_f/cantidad)
            return resultado.round(decimales)
        end


        return nil


    end

end 
end 
于 2016-09-29T17:06:12.840 に答える
-16

小数を切り捨てるには、次のコードを使用しました。

<th><%#= sprintf("%0.01f",prom/total) %><!--1dec,aprox-->
    <% if prom == 0 or total == 0 %>
        N.E.
    <% else %>
        <%= Integer((prom/total).to_d*10)*0.1 %><!--1decimal,truncado-->
    <% end %>
        <%#= prom/total %>
</th>

小数点以下 2 桁に切り捨てたい場合は、次を使用する必要があります。Integr(a*100)*0.01

于 2014-01-16T00:12:41.077 に答える