浮動小数点数をかなりフォーマットしていますが、関連する浮動小数点数がない場合は整数として表示したいと思います。
つまり.
少しの正規表現でこれを達成できますが、これを行うsprintf
のみの方法があるかどうか疑問に思いますか?
私はそれをRubyのようにかなり怠惰にやっています:
("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
使用したい%g
の代わりに %f
:
"%gx" % (factor / 100.00)
次のように、%gと%fを組み合わせて組み合わせることができます。
"%g" % ("%.2f" % number)
Railsを使用している場合は、RailsのNumberHelperメソッドを使用できます。 http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html
number_with_precision(13.001, precision: 2, strip_insignificant_zeros: true)
# => 13
number_with_precision(13.005, precision: 2, strip_insignificant_zeros: true)
# => 13.01
この場合、精度は小数点以下のすべての桁を意味するため、注意してください。
私は
price = price.round(precision)
price = price % 1 == 0 ? price.to_i : price.to_f
このようにして、文字列の代わりに数字を取得することもできます
別の方法は次のとおりです。
decimal_precision = 2
"%.#{x.truncate.to_s.size + decimal_precision}g" % x
または素敵なワンライナーとして:
"%.#{x.truncate.to_s.size + 2}g" % x
私はちょうどこれに出くわしました、上記の修正はうまくいきませんでした、しかし私はこれを思いつきました、それは私のために働きます:
def format_data(data_element)
# if the number is an in, dont show trailing zeros
if data_element.to_i == data_element
return "%i" % data_element
else
# otherwise show 2 decimals
return "%.2f" % data_element
end
end
number_with_precision(value, precision: 2, significant: false, strip_insignificant_zeros: true)