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

StackOverflow https://stackoverflow.com/questions/838064

  •  10-07-2019
  •  | 
  •  

質問

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

I.e。

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

ちょっとした正規表現でこれを達成できますが、これを行う sprintf のみの方法があるのではないかと思いますか?

私はそれを次のようにルビーでやや怠laにしています:

("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
役に立ちましたか?

解決

%f の代わりに%g を使用します:

"%gx" % (factor / 100.00)

他のヒント

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

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

レールを使用している場合、レールの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

この方法で、文字列の代わりに数字を取得する

これに出会ったばかりで、上記の修正は機能しませんでしたが、私はこれを思いつきました。

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

別の方法を次に示します。

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

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

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

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)

Ruby on Railsで浮動小数点数または10進数を切り捨てる(近似ではない)関数を探していたので、それを行うための次の解決策を見つけました。

コンソールで試すことができます。例:

>> a=8.88
>> (Integer(a*10))*0.10
>> 8.8

それが誰かの助けになることを願っています。 :-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top