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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • J2EE架构师之路「建议收藏」

    J2EE架构师之路「建议收藏」不经意的回首,工作进入第五个年头了,发现走过了从Java程序员到J2EE架构师的历程。发现电脑上安装了各种各样的J2EE工具:JBuilder,WSAD,Eclipse,Rose,Together,Weblogic,Jtest,Optimizator,Mysql…发现电脑上保存了各种各样的OpenSource项目:Tomcat,JBoss,Ant,Hibernate,Spr

    2022年6月30日
    23
  • vue分页列表[通俗易懂]

    vue分页列表[通俗易懂]html部分css部分js部分

    2022年10月1日
    0
  • 画平行线的三种方法_平行线的画法五种视频

    画平行线的三种方法_平行线的画法五种视频《平行线的画法》教学反思教师在教学中要善于利用小组合作学习,充分调动了同学们的积极性。接下来由小编整理了《平行线的画法》教学反思,欢迎查看,希望帮助到大家。《平行线的画法》教学反思【1】每到学习平行线的画法,总有学生学起来感到困难,用尺子移来移去,实在太麻烦,而且学生在以后也不容易记住。正是基于这样的认识画平行线的教学只能由教师传授给学生,他们也只能是机械的模仿,也就是简单的完成操作工的活动,但是…

    2022年9月20日
    0
  • Python线程指南[通俗易懂]

    Python线程指南[通俗易懂]本文介绍了Python对于线程的支持,包括“学会”多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例。注意:本文基于Python2.4完成;如果看到不明白的词汇请记得百度谷

    2022年7月3日
    19
  • APK签名命令「建议收藏」

    APK签名命令「建议收藏」apksigner,默认同时使用V1和V2签名进入AndroidSDK/build-tools/SDK版本,输入命令apksignersign–ks密钥库名–ks-key-alias密钥别名xxx.apk若密钥库中有多个密钥对,则必须指定密钥别名apksignersign–ks密钥库名–ks-key-alias密钥别名xxx.apk–ks-key-alias密钥库别名,若密钥库只有一个密钥对,则可省略,反之必选…

    2022年6月3日
    42
  • linux改sudo密码_linux怎么给用户权限

    linux改sudo密码_linux怎么给用户权限linux设置sudo不要密码

    2022年4月22日
    48

发表回复

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

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