double的精度????

public class yuan {

 static double  C(double r){
 return 3.14*r*r;

}

public static void main(String[] args) {

double a=3.14;
for(int i=1;i<30;i++){
System.out.println(i);
System.out.println(C(i));
System.out.println(a*i*i);
}
}

}
输出结果是1
3.14
3.14
2
12.56
12.56
3
28.259999999999998
28.259999999999998
4
50.24
50.24
5
78.5
78.5
6
113.03999999999999
113.03999999999999
7
153.86
153.86
8
200.96
200.96
9
254.34
254.34
10
314.0
314.0
11
379.94
379.94
12
452.15999999999997
452.15999999999997
13
530.66
530.66
14
615.44
615.44
15
706.5
706.5
16
803.84
803.84
17
907.46
907.46
18
1017.36
1017.36
19
1133.54
1133.54
20
1256.0
1256.0
21
1384.74
1384.74
22
1519.76
1519.76
23
1661.06
1661.06
24
1808.6399999999999
1808.6399999999999
25
1962.5
1962.5
26
2122.64
2122.64
27
2289.06
2289.06
28
2461.76
2461.76
29
2640.7400000000002
2640.7400000000002
请教大神们 为什么只有在 3 6 12 24 29 时候精度如此不同 小数点后面为什么这么多位???
谢谢

3个回答

要明白一点,浮点数在计算机内是用二进制表示的,而不是所有的10进制数都可以精确转换成二进制,所以某些情况下,会有转换误差。
反过来,浮点数存在一个有效精度的问题,不能简单理解为转换为10进制以后有多少小数位就是它的精度,这是两个概念。

qq_27040173
小猴雏 谢谢
5 年多之前 回复

原理在这里有介绍
http://blog.csdn.net/strollerV/article/details/1621382

但没有必要细究,没必要

qq_27040173
小猴雏 谢谢 我是初学者 见到错误就蒙了 哈哈非常谢谢你
5 年多之前 回复

double是双精度:2^52=4503599627370496,一共16位所以double的精度为16,double数据占64bit,double的指数范围是-1023-1024

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问