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


相关推荐

  • HTML空格符_HTML中什么表示特殊字符空格

    HTML空格符_HTML中什么表示特殊字符空格html+css代码在网页中如何插入打出空格字符实现方法摘要浏览器总是会截短HTML页面中的空格。HTML将所有空格字符,制表符,空格和回车符压缩为一个字符。如果要缩进段落,则不能简单地键入五个空格然后开始文本。如果您在文本中写10个空格,在显示该页面之前,浏览器会删除它们中的9个。如需在页面中增加空格的数量,您需要使用 字符实体。本篇就单介绍…

    2022年10月4日
    0
  • python源码之家_python画图代码大全

    python源码之家_python画图代码大全广告关闭2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。例如:想了解python做数据可视化的工作。我们可以从互联网找一些python做数据可视化的代码进行阅读,调试和迁移。这样做的好处,突出实用性。同时,我们在结合联想的学习方法,对所用到的可视化函数,做个更深入地了解和使用。我借用《数据科学和人工智能》这个公众号,分享一…

    2022年8月23日
    13
  • Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解[通俗易懂]

    Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解[通俗易懂]Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解

    2022年4月21日
    74
  • C++中decltype与左值和右值「建议收藏」

    1decltype关键字decltype是C++11中引入的新的类型说明符。编译器根据分析表达式或者函数返回值来分析其类型。decltype的详细用法,请参考《C++中decltype的使用方法》2decltype与左值和右值decltype后面跟的表达式是左值或者右值时,编译器分析的类型会有所不同。如果表达式(非单个变量)的求值结果是左值,则编译器会得到一个引用类型;如果表达式(非单个变量)的求值结果是右值,则编译器会得到一个与表达式相同的类型。intarr[2]={10,2.

    2022年4月8日
    86
  • Java基础,if,Integer最大值最小值,负数移位[通俗易懂]

    Java基础,if,Integer最大值最小值,负数移位[通俗易懂]如下:inta=2;if(a){//错误的,Incompatibletype,requiredboolean}if(!a){//错误的,Operate!cannotbeappliedtoint}System.out.println(Integer…

    2025年10月1日
    3
  • Maven环境变量配置

    Maven环境变量配置

    2021年10月1日
    53

发表回复

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

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