java字符串转换bigdecimal_安全字符串到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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值