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

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

 

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vs2015注册_vs2017试用期到了后怎么激活

    vs2015注册_vs2017试用期到了后怎么激活一般情况下要先安装IIS再装.NetFramework,这样可以保证.net的部分功能可以绑定到IIS,若安装顺序不对,可以后注册IIS,步骤如下:(1)在开始菜单中找到VS安装目录下的命令行提示符,以管理员身份运行。(2)输入IIS注册命令:aspnet_regiis-i

    2022年10月10日
  • linux关闭系统防火墙命令_linux系统如何关闭防火墙

    linux关闭系统防火墙命令_linux系统如何关闭防火墙LINUX关闭防火墙的方法导语:LINUX关闭防火墙的方法,你懂吗?下面的是百分网小编为大家搜集的LINUX关闭防火墙的方法,欢迎阅读,谢谢!(1)重启后永久性生效:开启:chkconfigiptableson关闭:chkconfigiptablesoff(2)即时生效,重启后失效:开启:serviceiptablesstart关闭:serviceiptablesstop需要说…

  • 1146 Topological Order「建议收藏」

    1146 Topological Order「建议收藏」题目题意:在给定有向图中,对于给定查询序列是否是有向图中的一个拓扑序列,记录非法序列下标tip:模拟拓扑排序#include<iostream>#include<vector>usingnamespacestd;intin_num[1003]={0};inttemp[1003]={0};vector<int>s[1003…

  • 程序猿入门

    程序猿入门

  • Java中Scanner的理解大总结「建议收藏」

    Java中Scanner的理解大总结「建议收藏」Scanner类常用的方法:Scnaner(Filefile);Scnaner(Stringfilename);创建一个从特定文件扫描的扫描器hasNext();还有可读取的书库返回truenext();返回下一个标志作为字符串nextLine();使用行分隔符从这个扫描器返回一个行结束nextByte();nextshort();nextInt();nextLong()

  • navict 15激活码_最新在线免费激活2022.02.17

    (navict 15激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlFZP9ED60OK-eyJsaWNlbnNlSWQi…

发表回复

您的电子邮箱地址不会被公开。

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