码迷,mamicode.com
首页 > 其他好文 > 详细

为什么使用long声明和double声明得到的结果不一样呢?

时间:2015-08-17 06:22:02      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

为什么使用long声明和double声明得到的结果不一样呢?

程序如下:

 1 public class P376{
 2 public static void main(String[] atgs){
 3      long sum1=0,n1=1;   //此处采用long声明;
 4         for (int i=1;i <=20;i++) {
 5               n1*=i;
 6               sum1+=n1;
 7         }
 8         System.out.println("1!+2!+3!+4!+5!....+20!="+sum1);
 9 //-------------------------------------------------------------  
10   double sum2=0,n2=1;  //此处采用double声明;
11         for (int i=1;i <=20;i++) {
12               n2*=i;
13               sum2+=n2;
14         }
15         System.out.println("1!+2!+3!+4!+5!....+20!="+sum2);
16   }
17   }

结果为:
1!+2!+3!+4!+5!....+20!=2561327494111820313
1!+2!+3!+4!+5!....+20!=2.5613274941118203E18

本来double型比 long型的精度还要高,为什么double型最后两位“13”就没有了呢? 
 不是比long型的精度还要低了嘛?
请问是不是double使用科学计数法只精确到小数点后16位显示?实际上结果是没有误差的?
使用float只显示小数点后8位呢?

为什么使用long声明和double声明得到的结果不一样呢?

标签:

原文地址:http://www.cnblogs.com/shunyao/p/4735415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!