安全字符串到BigDecimal转换

问题

我正在尝试从字符串中读取一些BigDecimal值。假设我有这个字符串:"1,000,000,000.999999999999999",我希望得到一个BigDecimal。这样做的方法是什么?

首先,我不喜欢使用字符串替换的解决方案(替换逗号等)。我认为应该有一些整洁的格式化程序为我做这项工作。

我找到了一个DecimalFormatter类,但是因为它运行的时间很长 - 大量的精度都会丢失。

那么,我该怎么做呢?


#1 热门回答(83 赞)

在DecimalFormat中查看setParseBigDecimal。使用此setter,parse将为你返回BigDecimal。


#2 热门回答(52 赞)

String value = "1,000,000,000.999999999999999";
BigDecimal money = new BigDecimal(value.replaceAll(",", ""));
System.out.println(money);

完整代码证明noNumberFormatException被抛出:

import java.math.BigDecimal;

public class Tester {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String value = "1,000,000,000.999999999999999";
        BigDecimal money = new BigDecimal(value.replaceAll(",", ""));
        System.out.println(money);
    }
}

输出> 1000000000.999999999999999


#3 热门回答(18 赞)

以下示例代码运行良好(需要动态获取区域设置)

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.text.ParsePosition;
import java.util.Locale;

class TestBigDecimal {
    public static void main(String[] args) {

        String str = "0,00";
        Locale in_ID = new Locale("in","ID");
        //Locale in_ID = new Locale("en","US");

        DecimalFormat nf = (DecimalFormat)NumberFormat.getInstance(in_ID);
        nf.setParseBigDecimal(true);

        BigDecimal bd = (BigDecimal)nf.parse(str, new ParsePosition(0));

        System.out.println("bd value : " + bd);
    }
}