问题
我正在尝试从字符串中读取一些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);
}
}