两个数不知道做减法运算??

cstsl 2010-09-11 11:07:47
BigDecimal num1=new BigDecimal(2.0);
BigDecimal num2=new BigDecimal(0.8);
BigDecimal result=num1.subtract(num2);
System.out.println("--result--- "+result);



--result--- 1.1999999999999999555910790149937383830547332763671875

为什么会是这个结果啊?? 要怎么才能是 :1.2??
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
BigDecimal 内部不是使用浮点数表示的,因此浮点小数转换为其内部的数据结构时会由于无法精确表示这个浮 点小数而导致在初始化时就不正确了。

BigDecimal num2 = new BigDecimal(0.8);

在构造出来后的值就已经不是 0.8 了,所以直接导致后面的计算结果不正确。

只要记住,不要使用数值类型数据来构造 BigDecimal 就可以了。
BearKin 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bao110908 的回复:]
BigDecimal 内部不是使用浮点数表示的,因此浮点小数转换为其内部的数据结构时会由于无法精确表示这个浮 点小数而导致在初始化时就不正确了。

BigDecimal num2 = new BigDecimal(0.8);

在构造出来后的值就已经不是 0.8 了,所以直接导致后面的计算结果不正确。

只要记住,不要使用数值类型数据来构造 BigDecimal 就可以了。
[/Quote]

学习
cstsl 2010-09-11
  • 打赏
  • 举报
回复
1楼的是对的! 但是为什么要加上"" 才能行啊??
mrlulisheng 2010-09-11
  • 打赏
  • 举报
回复
BigDecimal数据类型默认长度!
茫茫大海 2010-09-11
  • 打赏
  • 举报
回复
这个问题,可能无法根除,但是可以用Math的round方法,四舍五入啊!
  • 打赏
  • 举报
回复
构造 BigDecimal 的话,尽量使用字符串构造。
  • 打赏
  • 举报
回复
在构造中,把 2.0 和 0.8 加上引号弄成字符串,再试试看呢。

67,513

社区成员

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

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