java数据类型

ebigworm 2005-03-04 09:47:13
我在java下运行:
System.out.println(2.0-1.0);
System.out.println(2.0-1.1);
System.out.println(2.0f-1.1f);
System.out.println(2.0d+1.1d);
得到的结果是:
1.0
0.8999999999999999
0.9
3.1
有谁能给我解释一下吗?
...全文
81 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
quiton 2005-03-04
  • 打赏
  • 举报
回复
浮点数是不精确的。因为浮点数实际上是用二进制系统表示的。而分数1/10在二进制系统中没有精确的表示,就象在十进制系统中无法精确表示1/3一样。

如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。

如上面的例子,应该写成这样

System.out.println(BigDecimal.valueOf(20,1).subtract(BigDecimal.valueOf(11,1)));

具体可以参考Java的帮助文档
Ji秋风 2005-03-04
  • 打赏
  • 举报
回复
小数常量默认是double型的。
dongyang3 2005-03-04
  • 打赏
  • 举报
回复
java中的double在计算的时候会出现这样的情况。一般根据保留位进行舍入处理

62,614

社区成员

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

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