3

DecimalFormat回帰後に係数を出力しようとすると、問題が発生します。

問題に直面しているコードの部分は次のとおりです。

DecimalFormat twoDForm = new DecimalFormat("0.00");   
private double s(double d){  
    return Double.valueOf(twoDForm.format(d));  
}  

これがEclipseのエラーメッセージです。

Exception in thread "main" java.lang.NumberFormatException: For input string: "0,16"  
 at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)  
 at java.lang.Double.valueOf(Unknown Source)  
 at model.ARF2.s(ARF2.java:126)  
 at model.ARF2.printBestModel(ARF2.java:114)  
 at testing.testclass3.bestForecastingModel(testclass3.java:69)  
 at testing.testclass3.main(testclass3.java:36)  

コードを修正する方法について誰かがサージションを持っているかどうか教えてください。係数に 2 つの小数が必要です。

ありがとうございました

ラース

4

6 に答える 6

19

使用する:

    DecimalFormat twoDForm = new DecimalFormat("#.##");
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setDecimalSeparator('.');
    twoDForm.setDecimalFormatSymbols(dfs);
于 2012-05-24T04:00:10.390 に答える
2

i18nの問題が発生しています。DecimalFormatは、小数点記号をとして指定するデフォルトのロケールを使用しています,。ただし、Double.valueOfはロケールを使用しません。小数点は常にであると想定しています.

でフォーマットされた文字列を解析する場合は、DecimalFormat.parseDecimalFormatを使用する必要があります

于 2010-09-17T16:00:34.950 に答える
2

http://download.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html

次の抜粋は、問題の一部のようです。

デフォルト ロケールを含む特定のロケールの NumberFormat を取得するには、getInstance() などの NumberFormat のファクトリ メソッドのいずれかを呼び出します。通常、NumberFormat ファクトリ メソッドは DecimalFormat 以外のサブクラスを返す可能性があるため、DecimalFormat コンストラクターを直接呼び出さないでください。フォーマット オブジェクトをカスタマイズする必要がある場合は、次のようにします。

 NumberFormat f = NumberFormat.getInstance(loc);
 if (f instanceof DecimalFormat) {
     ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
 }

applyPattern メソッドを使用することもできます。

適用パターン

public void applyPattern(String pattern) 指定されたパターンをこの Format オブジェクトに適用します。パターンは、さまざまな書式設定プロパティの簡略仕様です。これらのプロパティは、さまざまなセッター メソッドを使用して個別に変更することもできます。このルーチンによって設定される整数の桁数に制限はありません。実際の値を設定する場合は、setMaximumInteger を使用します。負の数の場合は、セミコロンで区切られた 2 番目のパターンを使用します

例 "#,#00.0#" -> 1,234.56

これは、最小 2 桁の整数、1 桁の小数部、および最大 2 桁の小数部を意味します。

例: "#,#00.0#;(#,#00.0#)" は、括弧内の否定を表します。

負のパターンでは、最小カウントと最大カウントは無視されます。これらは正のパターンで設定されていると推定されます。

例外: NullPointerException - パターンが null の場合 IllegalArgumentException - 指定されたパターンが無効な場合。

于 2010-09-17T13:23:31.680 に答える
1

あなたが意図したことは次のとおりだと思います:

private static String s(double d) {
   return twoDForm.format(d);
}
于 2010-09-17T13:28:51.077 に答える
0

ロケールを確認してください。

DecimalFormat twoDForm = new DecimalFormat("0.00");   
    private double s(double d){ 

    String doubleString =  displayNumberAmount(twoDForm.format(d));
        return Double.valueOf(doubleString);  
    } 

    public static String displayNumberAmount(String amount) {

            NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH);

            Number number = 0;

            try {
                number = numberFormat.parse(amount);

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return String.format(Locale.US, "%1$,.2f", number);
        }
于 2014-01-29T08:57:19.720 に答える
0

数値をフォーマットしようとしていますか? それとも丸める?それをフォーマットしている場合、「s」メソッド(悪い名前のIMO、ところで、それはプライベートなので、あなたの呼び出しです)はaのjava.lang.String代わりにaを返すべきではありdoubleませんか?

于 2010-09-17T13:28:21.267 に答える