关于java浮点运算的一个怪异现象:0.01+0.09不等于0.1?!

bigbro001 2008-11-13 12:47:25
public class Test
{
public static void main(String[] args)
{
double x = 0.01;
double y = 0.09;
System.out.println(x + y);
}
}

为什么输出结果是0.09999999999999999而不是0.1啊?
奇怪的是当x,y改为float后,结果就等于0.1了,
更奇怪的是,如果把x,y分别改为float的0.01和0.04,在相加,结果居然是0.049999997,
这种浮点运算不精确的背后原理到底是什么呢?
...全文
282 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
saygoodbyetoyou 2009-06-12
  • 打赏
  • 举报
回复
5楼的 难道你希望在计算账目的时候0.01+0.09=0.09999999999999999?
renmms 2008-11-13
  • 打赏
  • 举报
回复
flloat精度的问题
yh4130a 2008-11-13
  • 打赏
  • 举报
回复
浮点运算 就是这样的,正常..
showde123 2008-11-13
  • 打赏
  • 举报
回复
up
ouyangxiaokang6 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kimminho 的回复:]
建议楼主使用 java.math.BigDecimal
[/Quote]
up
tujiyue 2008-11-13
  • 打赏
  • 举报
回复
都是精度的问题,把java的基本类型好好看下
kinglyhum 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 bigbro001 的帖子:]
public class Test
{
public static void main(String[] args)
{
double x = 0.01;
double y = 0.09;
System.out.println(x + y);
}
}

为什么输出结果是0.09999999999999999而不是0.1啊?
奇怪的是当x,y改为float后,结果就等于0.1了,
更奇怪的是,如果把x,y分别改为float的0.01和0.04,在相加,结果居然是0.049999997,
这种浮点运算不精确的背后原理到底是什么呢?
[/Quote]
0.09999999999999999无疑比0.1更精确,double精度比float高
kimminho 2008-11-13
  • 打赏
  • 举报
回复
建议楼主使用 java.math.BigDecimal
一头头 2008-11-13
  • 打赏
  • 举报
回复
是2进制和16进制转换的时候的偏度差造成的。

属于正常现象。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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