結果がゼロを返すときに負の符号を切り捨てる方法はありますか? 10進形式を使用している間?
DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);
formattedValue = df.format("-0.023");
上記のコードは -0.0 を返します。0.0 だけを返す方法はありますか? ただし、結果が負の数の場合は負号を保持したいと思います。
結果がゼロを返すときに負の符号を切り捨てる方法はありますか? 10進形式を使用している間?
DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);
formattedValue = df.format("-0.023");
上記のコードは -0.0 を返します。0.0 だけを返す方法はありますか? ただし、結果が負の数の場合は負号を保持したいと思います。
だけでそれを行う方法はないと思いますがDecimalFormat
、このワンライナーで問題を解決できます。
formattedValue = formattedValue.replaceAll( "^-(?=0(\\.0*)?$)", "");
""
マイナス記号の後に の 0-n 文字が続く場合、マイナス記号を削除 ( に置き換え) する"0.00000..."
ため、これは"-0"
、 、"-0."
または"-0.000000000"
ここにいくつかのテストコードがあります:
public static void main(String[] args) {
System.out.println(format(-0.023));
System.out.println(format(12.123));
System.out.println(format(-12.345));
System.out.println(format(-0.123));
System.out.println(format(-1.777));
}
public static String format(double number) {
DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);
String formattedValue = df.format(number);
formattedValue = formattedValue.replaceAll("^-(?=0(\\.0*)?$)", "");
return formattedValue;
}
出力 (予想どおり):
0.0
12.1
-12.3
-0.1
-1.8
これは避けるべき回避策になると思います-0.0
。次のコードを使用します。
DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);
df.setNegativePrefix(""); // set negative prefix BLANK
String formattedValue = df.format(-0.023);
df.setNegativePrefix("-"); // set back to - again
System.out.println(formattedValue);
出力:
0.0
これを試して:DecimalFormat df = new DecimalFormat("#,##0.0#;(#,##0.0#)");
DecimalFormatのJavadocによると:
DecimalFormat パターンには、「#,##0.00;(#,##0.00)」などの正と負のサブパターンが含まれます。各サブパターンには、プレフィックス、数値部分、およびサフィックスがあります。負のサブパターンはオプションです。存在しない場合は、ローカライズされたマイナス記号 (ほとんどのロケールでは「-」) が前に付いた肯定的なサブパターンが否定的なサブパターンとして使用されます。つまり、"0.00" だけは "0.00;-0.00" と同じです。明示的な負のサブパターンがある場合は、負の接頭辞と接尾辞を指定するためだけに機能します。桁数、最小桁数、およびその他の特性はすべて正のパターンと同じです。つまり、「#,##0.0#;(#)」は「#,##0.0#;(#,##0.0#)」とまったく同じ動作を生成します。
計算値=「-0.0」が「0.0」に等しいかどうかを確認する
コード sush を次のようにカプセル化できます。
public String getFormattedValue(String input) {
DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);
String formattedValue = df.format(input);
if (formattedValue.equalsIgnoreCase("-0.0")) {
formattedValue = "0.0";
}
System.out.println(formattedValue);
return formattedValue;
}