H5W3
当前位置:H5W3 > 其他技术问题 > 正文

java中千分位转回数值的问题

现在转换一个比很大的数字:

String str = "99996789987.1419";
BigDecimal bigDecimal = new BigDecimal(str);
NumberFormat numberInstance = DecimalFormat.getNumberInstance();
numberInstance.setMaximumFractionDigits(4);
String format = numberInstance.format(bigDecimal);
System.out.println(format);

结果: 99,996,789,987.1419

转千分位是没问题的,现在遇到的问题是千分位往回转:

System.out.println(numberInstance.parse(format));

结果: 9.67899871419E7

这怎么把他还原回去呢?

———————————-分割———————————

现在找到一个方法,就是先将千分后的值用”.”分割成两个,然后解析,最后再将小数位拼接过来:

String[] split = format.split("\\.");
Number parse = numberInstance.parse(split[0]);
System.out.println(parse + "." + split[1]);

结果:
clipboard.png

有没有不这么麻烦的方法么…

回答:

既然都是处理string,String.replace可以么?

    String str = "99996789987.1419";
    BigDecimal bigDecimal = new BigDecimal(str);
    NumberFormat instance = DecimalFormat.getNumberInstance();
    instance.setMaximumFractionDigits(4);
    String format = instance.format(bigDecimal);
    System.out.println(format);

    System.out.println(format.replace(",", ""));
    

输出:

99,996,789,987.1419
99996789987.1419

回答:

new BigDecimal(format) 这个场景可以勉强满足需求…

回答:

 public static void main(String[] args) {
        String str = "99996789987.1419";
        BigDecimal bigDecimal = new BigDecimal(str);
        DecimalFormat df = new DecimalFormat("###,###.0000");
        String result = df.format(bigDecimal.doubleValue());
        System.out.println(result);


        try {
            System.out.println(new BigDecimal(df.parse(result).doubleValue()).setScale(4, BigDecimal.ROUND_HALF_UP));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
output
99,996,789,987.1419
99996789987.1419

本文地址:H5W3 » java中千分位转回数值的问题

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址