运行项目时出现这个数据类型转换的问题: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账号...