3

数値をフォーマットするためにパターン「#0.00##」を使用していますが、ほとんどの入力で期待どおりに機能します。ただし、ソース番号が 6.84378E-05 のように小さい場合があり、「0,0001」に変換されます。

科学表記法を使用して、そのような数値 (標準パターンに適合しない) のみをフォーマットすることは可能ですか? すべての「通常の」番号をそのままにしますか? シングルパターンで。

追加のコードを使用せずに、DecimalFormat パターンを 1 つだけ使用する必要があります。

編集: 単一の DecimalFormat が必要な理由をよりよく説明するには: 外部ライブラリを使用しており、出力を構成するためのパターンしか定義できません。

4

1 に答える 1

2

正の値と負の値に対してのみ異なるパターンを持つことができます。次のようにする必要があります。

public class DecimalScientificFormat extends DecimalFormat {
    private static DecimalFormat df = new DecimalFormat("#0.00##");
    private static DecimalFormat sf = new DecimalFormat("0.###E0");

    @Override
    public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) {
        String decimalFormat = df.format(number);
        return (0.0001 != number && df.format(0.0001).equals(decimalFormat)) ? sf.format(number, result, fieldPosition) : result.append(decimalFormat);
    }
}
于 2013-01-15T15:42:13.973 に答える