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

wnj89510 2015-06-10 12:13:58
我从excel中取出里面的数据,是String类型的,但是数据中有小数,现在我想把它(String类型的小数,如1.2)转换成double类型的进行相加,但转换之后(使用Double.parseDouble(“1.2”)方法),就直接四舍五入变成了“1”,并不是我想要的double类型的“1.2”,请问这个问题怎么解决呢?急!
...全文
1653 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以Java语言在设计,没有为该操作设计语法,而是由JVM自动完成。 转换规则 从存储范围小的类型到存储范围大的类型。 具体规则为: byte→short(char)→int→long→float→double 也就是说byte类型的变量可以自动转换为short类型,示例代码: byte b = 10; short sh = b; 这里在赋值,JVM首先将b的值转换为short类型,然后再赋值给sh。 在类型转换可以跳跃。示例代码: byte b1 = 100; int n = b1; l 注意问题 在整数之间进行类型转换,数值不发生改变,而,特将整数类型别是比较大的整数类型转换成小数类型,由于存储方式不同,有可能存在数据精度的损失。 强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失才进行该类型的转换。 转换规则 从存储范围大的类型到存储范围小的类型。 具体规则为: double→float→long→int→short(char)→byte 语法格式为: (转换到的类型)需要转换的值 示例代码: double d = 3.10; int n = (int)d; 这里将double类型的变量d强制转换成int类型,然后赋值给变量n。需要说明的是小数强制转换为整数,采用的是“去1法”,也就是无条件的舍弃小数点的所有数字,则以上转换出的结果是3。整数强制转换为整数取数字的低位,例如int类型的变量转换为byte类型,则只去int类型的低8位(也就是最后一个字节)的值。

67,543

社区成员

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

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