web-dev-qa-db-ja.com

浮動小数点コンポーネントが.00sprintf / printfでない場合にのみ、小数点を表示します

浮動小数点数をかなりフォーマットしていますが、関連する浮動小数点数がない場合は整数として表示したいと思います。

つまり.

  • 1.20-> 1.2x
  • 1.78-> 1.78x
  • 0.80-> 0.8x
  • 2.00-> 2x

少しの正規表現でこれを達成できますが、これを行うsprintfのみの方法があるかどうか疑問に思いますか?

私はそれをRubyのようにかなり怠惰にやっています:

("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
39
Bo Jeanes

使用したい%g の代わりに %f

"%gx" % (factor / 100.00)
49
Naaff

次のように、%gと%fを組み合わせて組み合わせることができます。

"%g" % ("%.2f" % number)
28
gylaz

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

この場合、精度は小数点以下のすべての桁を意味するため、注意してください。

21
Viktor Fonic

私は

price = price.round(precision)
price = price % 1 == 0 ? price.to_i : price.to_f

このようにして、文字列の代わりに数字を取得することもできます

6
Eugene

別の方法は次のとおりです。

decimal_precision = 2
"%.#{x.truncate.to_s.size + decimal_precision}g" % x

または素敵なワンライナーとして:

"%.#{x.truncate.to_s.size + 2}g" % x
3
alexebird

私はちょうどこれに出くわしました、上記の修正はうまくいきませんでした、しかし私はこれを思いつきました、それは私のために働きます:

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
3
Joelio

Railsで簡単: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_with_precision

number_with_precision(value, precision: 2, significant: false, strip_insignificant_zeros: true)
2
Yarin