1. ホーム
  2. java

[解決済み] 通貨単位で小数をフォーマットするには?

2022-03-02 04:33:56

質問

小数を以下のようにフォーマットする方法はありますか?

100   -> "100"  
100.1 -> "100.10"

丸数字の場合は、小数点以下は省略する。それ以外の場合は、小数点以下2桁で書式設定します。

どのように解決するのですか?

どうでしょう。問題は、100がfloatなら100になることはなく、99.99999999とか100.0000001とか普通になることです。

もしそのようにフォーマットしたいのであれば、イプシロン、つまり整数値からの最大距離を定義し、その差が小さければ整数値、そうでなければフロートを使用する必要があります。

こんな感じでいいんじゃないでしょうか。

public String formatDecimal(float number) {
  float epsilon = 0.004f; // 4 tenths of a cent
  if (Math.abs(Math.round(number) - number) < epsilon) {
     return String.format("%10.0f", number); // sdb
  } else {
     return String.format("%10.2f", number); // dj_segfault
  }
}