java.lang.NumberFormatException: For input string: “0.001”

java.lang.NumberFormatException: For input string: “0.001”

运行项目时出现这个数据类型转换的问题:java.lang.NumberFormatException: For input string: “0.001”

这句话明确告诉了我们是数字格式异常,接着后面有 For input string: “0.001 ” 提示,这就告诉我们你当前想把 “0.001” 转换成数字类型时出错了,这样就很确切知道问题所在。

后台返回给的值是个String类型的数据,在前端需要展示百分比数据。

这是我们的逻辑应该是 用String字符串数据接收,然后转换为double类型

        String num = myRankingRes.getData().getEarnings();//后台返回数据 即报错0.001
        double numToDouble = Double.parseDouble(num); // 先转换成double类型
        //Integer i = numToDouble.intValue(); // 再转换成int类型(会损失精度)这里不建议采用
        mTextView.setText(numToDouble * 100 + "%");//收益

eg:Double.parseDouble(“0.059”)*100;    结果有点看不懂  5.8999999999999995;

而如果修改一下数字   Double.parseDouble(“0.0592”)*100;  结果却是正常  5.92

可能是浮点型计算时的误差吧!(精度的问题)

public static void main(String[] args) {
        String str = "0.059";
        double parseDouble = Double.parseDouble(str);
        System.out.println(parseDouble);
        System.out.println(parseDouble * 100);
        System.out.println("=================");
        String str1 = "0.0592";
        double parseDouble1 = Double.parseDouble(str1);
        System.out.println(parseDouble1);
        System.out.println(parseDouble1 * 100);
        System.out.println("=================");
        BigDecimal bd = new BigDecimal(parseDouble * 100);
        double doubleValue = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println(doubleValue);
        System.out.println("=================");
        BigDecimal b = new BigDecimal("0.0592");
        BigDecimal multiply = b.multiply(new BigDecimal("100"));
        System.out.println(multiply.doubleValue());

    }

结果如下:

0.059
5.8999999999999995
=================
0.0592
5.92
=================
5.9
=================
5.92

根据自己返回的数据,斟酌后用适合自己的方式。

 

书到用时方恨少,纸上得来终觉浅。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114989.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 老鸟的Python新手教程

    老鸟的Python新手教程

    2021年12月10日
  • VHDL和Verilog的区别

    VHDL和Verilog的区别这两种语言都是用于数字电子系统设计的硬件描述语言,而且都已经是IEEE的标准。VHDL1987年成为标准,而Verilog是1995年才成为标准的。这个是因为VHDL是美国军方组织开发的,而Verilog是一个公司的私有财产转化而来的。为什么Verilog能成为IEEE标准呢?它一定有其优越性才行,所以说Verilog有更强的生命力。 这两

    2022年4月19日
  • stl merge函数使用

    stl merge函数使用merge函数的作用是:将两个已经排好序的序列合并为一个有序的序列。函数参数:merge(first1,last1,first2,last2,result,compare);firs1t为第一个容器的首迭代器,last1为第一个容器的末迭代器;first2为第二个容器的首迭代器,last2为容器的末迭代器;result为存放结果的容器,comapre为比较函数(可略写,默认为合并为…

    2022年6月8日
  • JMeter实战(三) 界面使用

    JMeter实战(三) 界面使用

    2020年11月20日
  • pycharm配色方案下载_sublime修改字体大小

    pycharm配色方案下载_sublime修改字体大小话不多说,先看效果图python中设置配色基本流程都差不多,版本不一样,但是基本设置也是大同小异步骤如下:第一步:File→Settings→Appearance&Behavior→Theme:Darcula→OK第二步:File→Settings→Editor→ColorScheme→ColorSchemeFont→Sche…

    2022年8月27日
  • JSONPath浅析

    JSONPath浅析 在日常的项目开发中,我们常常会为了避免在代码中hardcoding而对某些参数进行配置化,进而提高开发效率和灵活性。而常用的数据结构就是JSON。而对配置的数据的获取的方式常常有以下几种方式:第一种:JSONPath:@TestpublicvoidtestJsonPath(){JSONObjectdata=JSONObject…

    2022年6月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号