26

結果がゼロを返すときに負の符号を切り捨てる方法はありますか? 10進形式を使用している間?

DecimalFormat df = new DecimalFormat("#,##0.0");
df.setRoundingMode(RoundingMode.HALF_UP);
formattedValue = df.format("-0.023");

上記のコードは -0.0 を返します。0.0 だけを返す方法はありますか? ただし、結果が負の数の場合は負号を保持したいと思います。

4

7 に答える 7

25

だけでそれを行う方法はないと思いますが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
于 2012-08-13T07:12:07.227 に答える
5

これは避けるべき回避策になると思います-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
于 2012-08-13T06:43:50.263 に答える
2

これを試して: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#)」とまったく同じ動作を生成します。

于 2012-08-13T06:31:46.510 に答える
1

計算値=「-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;
    }
于 2012-08-13T06:36:09.773 に答える