安全字符串到大十进制转换

2022-08-31 08:35:18

我正在尝试从字符串中读取一些BigDecimal值。假设我有这个字符串:“1,000,000,000.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999有什么办法可以做到这一点?

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

我找到了一个DecimalFormatter类,但是由于它通过双倍操作 - 损失了大量的精度。

那么,我该怎么做呢?


答案 1

查看 DecimalFormat 中的 setParseBigDecimal。使用此 setter,parse 将为您返回一个大十进制。


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

证明不被抛出的完整代码NumberFormatException

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


推荐