A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王光保 黑马帝   /  2011-7-22 15:08  /  2461 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写了一个关于double类型的数据运算问题,
public class Test{
public static void main(String args[]){
   double a = 14.29;
   System.out.println(14.29*1.1);
  }
}
看看运行结果:15.719000000000001
用计算器运行的结果是:15.719
不知道是什么原因啊!
[ 本帖最后由 wangguangbao 于 2011-07-22  15:33 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 不错的童鞋!

查看全部评分

2 个回复

倒序浏览
黑马网友  发表于 2011-7-22 16:26:47
沙发
Double类型的toString方法有关吧
回复 使用道具 举报
黑马网友  发表于 2011-7-22 16:47:14
藤椅
很好的问题题,一起交流学习哈,我是这样理解的:
首先double本身就不精确,你看到14.29当在计算机里用二进制表示时,它只是无限接近14.29而已,这涉及到二进制小数位表示的方法:
小数部分:0.29 表示二进制方法
                    0.29*2=0.58   取0[取整数部分做为第一项]
     0.58*2=1.06   取1
                    0.06*2=0.12  取0
                    0.12*2=0.24  取0
                             ......         直到值为0或形成循环小数则停止。
从上面可见,小数部分是取之不尽的,所以二进制不能正确表达这个小数部分,因此,它在计算机表示时本身就不是精确的,所以结果也就不精确了。这是所有程序语言都存在的问题,只是有些被封装了解决方法,所以结果是精确的。
  在java中想计算精确得用这个类:BigDecimal
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马