为了账号安全,请及时绑定邮箱和手机立即绑定

安全字符串到BigDecimal的转换

安全字符串到BigDecimal的转换

HUH函数 2019-10-18 14:48:25
我正在尝试从字符串中读取一些BigDecimal值。假设我有以下字符串:“ 1,000,000,000.999999999999999”,我想从中获取一个BigDecimal。怎么做呢?首先,我不喜欢使用字符串替换(替换逗号等)的解决方案。我认为应该有一些精巧的格式化程序为我完成这项工作。我发现了DecimalFormatter类,但是它通过两次操作-损失了大量精度。那么,我该怎么办呢?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

看看setParseBigDecimal在DecimalFormat的。使用此设置器,parse将为您返回一个BigDecimal。


查看完整回答
反对 回复 2019-10-18
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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


查看完整回答
反对 回复 2019-10-18
?
ibeautiful

TA贡献1993条经验 获得超5个赞

以下示例代码运行良好(需要动态获取语言环境)


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);

    }

}


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 572 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信