15

DecimalFormat の正確な動作を完全に理解しようとしています。私は現在、このクラスの科学表記法機能を使用していくつかのテストを行っています。そして、科学表記法の正確な有効桁数の調整に関する問題に直面しています。Java 7 の Javadoc によると:

仮数部の有効桁数は、最小整数桁と最大小数桁の合計であり、最大整数桁の影響を受けません。たとえば、「##0.##E0」でフォーマットされた 12345 は「12.3E3」です。すべての桁を表示するには、有効桁数をゼロに設定します。有効桁数は解析には影響しません。

その結果、私はそれをテストしています:

DecimalFormat formatone = new DecimalFormat("##0.##E0");
System.out.println(formatone.format(toF));

そして、次の出力を取得します。

12,345E3

先ほど示した Javadoc の抜粋によると、取得する必要があると思いました。

12.3E3

私は何か間違っていますか?私は何か間違ったことを理解しましたか?

事前にすべての説明をありがとう:-)

4

4 に答える 4

0

http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.htmlから、次の「説明」が出てきます。不思議に思う。

整数桁の最小数と最大数は一緒に解釈されます。

整数の最大数が最小数より大きく1より大きい場合、指数は整数の最大数の倍数になり、整数の最小数は1として解釈されます。最も一般的なこれを使用して、指数が3の倍数であるエンジニアリング表記を生成します(例: "##0。#####E0")。このパターンを使用すると、番号12345は「12.345E3」にフォーマットされ、123456は「123.456E3」にフォーマットされます。

于 2011-12-14T14:12:10.750 に答える
-1

小数をフォーマットするときは、小数とグループ区切り文字を必ず制御してください。

これはそれを行う方法です(すべてのフォーマットパターンの代替に注意してください):

@Test
public void test() {        
    double toF = 12345;
    DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
    decimalFormatSymbols.setDecimalSeparator('.');
    decimalFormatSymbols.setGroupingSeparator(',');

    System.out.println((new DecimalFormat("#.#E0", decimalFormatSymbols)).format(toF));
    System.out.println((new DecimalFormat("#0.#E0", decimalFormatSymbols)).format(toF));
    System.out.println((new DecimalFormat("##0.#E0", decimalFormatSymbols)).format(toF));
    System.out.println((new DecimalFormat("##0.##E0", decimalFormatSymbols)).format(toF));
    System.out.println((new DecimalFormat("##0.###E0", decimalFormatSymbols)).format(toF));
}

以下を出力します。

1.2E4
1.23E4
12.34E3
12.345E3
12.345E3

Java 8 API ドキュメントで詳細情報を入手できます。これは、これまで見てきたものよりも新しい可能性があります。

于 2018-12-11T14:16:42.223 に答える