3

String 配列から BigDecimal に値を解析したい場合、次のエラーが発生します。

Exception in thread "main" java.text.ParseException: Unparseable number: "86400864008640086400222"

これを修正する方法をインターネットで検索しています。たぶん、あなたたちは知っていますか?

BigDecimal を使用するのは私の考えではありませんでしたが、残念ながら私はそうしなければなりません。値を String から BigDecimal に変更して返すコードをいくつか作成しました。

public static BigDecimal parseCurrencyPrecise (String value) throws ParseException
{
    NumberFormat  format = NumberFormat.getCurrencyInstance ();
    if (format instanceof DecimalFormat)
        ((DecimalFormat) format).setParseBigDecimal (true);

    Number  result = format.parse (value);
    if (result instanceof BigDecimal)
        return (BigDecimal) result;
    else {
        // Oh well...
        return new BigDecimal (result.doubleValue ());
    }
}

解析しようとするときの私のコードは次のとおりです。

public void Function() throws ParseException {
    String [] array;
    array=OpenFile().split("\\s");
    for(int i = 10 ;i < array.length; i+= 11) {
        BigDecimal EAE = parseCurrencyPrecise(array[i]);
        System.out.println(EAE);
    }
}

OpenFile 関数は、データを含むファイルを開き、この方法でこれを読み取りますL temp+=line+" "; これが、\s で分割する理由です。これは文字列と整数で機能しますが、BigDecimal で問題が発生しました。

ご挨拶、

4

2 に答える 2

3

BigDecimal(String val)自分で解析する代わりに、コンストラクターを利用できます。Javadocから

BigDecimal(String val)
Translates the string representation of a BigDecimal into a BigDecimal

例えば:

BigDecimal bigDecimal = new BigDecimal("86400864008640086400222");

コンストラクターが取る形式については、Javadoc を参照してください。

于 2015-01-05T21:17:38.660 に答える
2

コンストラクタを使用できない理由はありますか? 必要以上に複雑にしているようです。これは私のために働いた:

System.out.println(new BigDecimal("86400864008640086400222"));
于 2015-01-05T21:23:17.447 に答える