15

DecimalFormat を使用して価格をフォーマットしようとしていますが、これはすべてのバリエーションで機能するとは限りません。

DecimalFormat df = new DecimalFormat("0.##")
df.format(7.8)
df.format(85.0)

版画

7.80

85

ただし、「7.79999」は「7.80」ではなく「7.8」としてフォーマットされます。私はこのように物事をやろうとしました

DecimalFormat df = new DecimalFormat("0.00")

2 dp を強制しますが、「85.0」は「85」ではなく「85.00」としてフォーマットされます。

価格が #、##、または #.## として印刷されるように、すべてのバリエーションをキャプチャする方法はありますか? 例えば:

5、55、5.55、5.50、500、500.40

4

6 に答える 6

22

これら 2 つの形式にはわずかな違いがあります。「#.##」は小数点以下 2 桁までの数値を出力することを意味し、「#.00」は常に小数点以下 2 桁を表示し、小数点以下の桁数が 2 未満の場合はゼロに置き換えることを意味します。以下の出力例を参照してください。

public static final DecimalFormat df1 = new DecimalFormat( "#.##" );
public static final DecimalFormat df2 = new DecimalFormat( "#.00" );

System.out.println(df1.format(7.80));
System.out.println(df1.format(85));
System.out.println(df1.format(85.786));

System.out.println(df2.format(7.80));
System.out.println(df2.format(85));
System.out.println(df2.format(85.786));

出力は次のようになります。

7.8
85
85.79

7.80
85.00
85.79
于 2013-05-16T09:37:38.610 に答える
13

これは、単一の では解決されないようですformatter。format を使用し、空の文字列"0.00"に置き換えることをお勧めします。".00"

public static String myFormat(double number) {
  DecimalFormat df = new DecimalFormat("0.00");
  return df.format(number).replaceAll("\\.00$", "");
}
于 2013-05-16T09:37:54.330 に答える
4

少なくとも Java SE フォーマッターでは不可能だと思います。カスタムフォーマッタを作成する必要があります。私はこのようにします

String res = df.format(number).replace(".00", "");
于 2013-05-16T09:32:05.480 に答える
3

代わりに BigDecimal 数値クラスを使用します。

たとえば、n が BigDecimal の場合、次を使用できます

String s = NumberFormat.getCurrencyInstance().format(n);

ちなみに、お金を扱うときは BigDecimal を使うのがベストプラクティスです。

于 2013-05-16T09:29:54.510 に答える
-2
System.out.println(new java.text.DecimalFormat("#.##").format(5.00));

これにより、5が出力されます

System.out.println(new java.text.DecimalFormat("#.00").format(500.401));

これにより、500.40が出力されます

于 2018-01-30T02:23:44.777 に答える