String类型的小数转换成double时,丢失精度

wnj89510 2015-06-10 12:13:58
我从excel中取出里面的数据,是String类型的,但是数据中有小数,现在我想把它(String类型的小数,如1.2)转换成double类型的进行相加,但转换之后(使用Double.parseDouble(“1.2”)方法),就直接四舍五入变成了“1”,并不是我想要的double类型的“1.2”,请问这个问题怎么解决呢?急!
...全文
1697 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
boybaozi 2015-06-10
  • 打赏
  • 举报
回复
parseDouble应该是带小数位的啊
  • 打赏
  • 举报
回复
楼主的问题不太符合逻辑吧,正常情况下,如果想四舍五入的话都需要特殊处理的,你这样直接转换是不会丢失精度的啊。
liangtu 2015-06-10
  • 打赏
  • 举报
回复
用BigDecimal

BigDecimal b1 = new BigDecimal(para1);
BigDecimal b2 = new BigDecimal(para2);
return String.valueOf(b1.add(b2).doubleValue());
SUN丶XT 2015-06-10
  • 打赏
  • 举报
回复
检查一下,取出来时是否就是为1.2的String字符串,我怀疑可能取出来时为int,导致先变成整形了。
SUN丶XT 2015-06-10
  • 打赏
  • 举报
回复
String a = "1.666"; double b = Double.parseDouble(a); System.out.println(a); 我本地测试也是没有问题的,输出结果也是1.666
掉渣哥 2015-06-10
  • 打赏
  • 举报
回复
Double.parseDouble("1.2") 结果不会损失经度的
二十亩鱼 2015-06-10
  • 打赏
  • 举报
回复
先检查你的代码有无 问题,parseDouble方法无问题。
给你看看我本地的测试:
资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在Java中,BigDecimal是一种用于处理高精度数值的数据类型,尤其适合金融和科学计算等需要精确运算的场景。然而,有我们需要将BigDecimal转换为Double类型,比如为了与某些方法的参数兼容或进行基于Double的运算。本文将介绍如何在Java中实现BigDecimal到Double的转换,并探讨转换过程中需要注意的关键点。 BigDecimal是java.math包下的一个类,用于表示不可变的、任意精度的十进制数。它支持非常大的数字和高精度的计算,例如金融领域的货币值计算。BigDecimal的主要用途包括: 金融计算:货币计算需要高精度,BigDecimal可避免浮点数运算误差。 科学计算:适用于对精度要求极高的场景。 避免浮点数误差:在涉及小数点的运算中,BigDecimal能确保精确性。 最直接的转换方式是通过BigDecimal类的doubleValue()方法。它会将BigDecimal对象的值转换为Double类型。例如: 在这个例子中,moneyStr被转换为BigDecimal,然后通过doubleValue()方法转换为Double精度损失:Double类型精度有限(约15到16位有效数字),而BigDecimal可以存储更多位数。因此,转换可能会丢失部分小数位。 溢出问题:如果BigDecimal的值超出Double的表示范围,转换结果可能会出现溢出,导致数据不准确。 为了避免精度损失,可以采用以下方法: 使用toString()方法:先将BigDecimal转换为String,再通过Double.parseDouble()转换为Double。这种方法可以避免因Double类型限制导致的精度丢失。 自定义转换逻辑:在转换前判断BigDeci

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧