C语言中float和double的精度问题
总体原则
printf("%3.0f",floatNum)
:不保留小数
说明:%3.0f表明待打印的浮点数(floatNum)至少占3个字符宽,且不带小数点和小数部分,整数部分至少占3个位宽;
注意:这里的3只代表整数部分至少占3位,舍弃小数点和小数点后面的部分
printf("%6.2f".floatNum)
:保留两位小数
说明:%6.2f 表明待打印的数(floatNum)至少占6个字符宽度(包括两位小数和一个小数点),且小数点后面有2位小数,小数点占一位,所以整数部分至少占3位。
注意:这里的6是待打印的数至少占据的字符宽度,包括两位小数(如果小数不够两位用0补位,例如100.1打印出来为100.10)和一个小数点,所以整数部分至少占3个字符宽度。
单精度实数的有效位数一般为7位,输出6位小数,超出有效位数输出就是错误的。
双精度数有效位数一般为16位,输出6位小数,超出有效位数可能截断或错误值。
保留小数点后有效位数四舍五入原则
1 |
|
- 输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30a + b = 0.6
a - b = -0.2
0.200000
0.600000
100.000000
100
100.300000
100
100.500000
100
100.530000
100.5
100.550000
100.5
100.560000
100.6
100.563000
100.56
100.565000
100.56
100.566000
100.57