点这里看原题
点这里
float会在取近似值的时候舍掉对应精度后面的所有数值!只有double 才会四舍五入! 首先看看这个程序:
#include<bits/stdc++.h> using namespace std; int main(){ float a = 1.00; for(int i = 1; i <= 10; i ++) a += 0.01, printf("当a等于 %f 时,精确到小数点后两位数是 %.1f \n", a , a); puts(""); for(int i = 1; i <= 10; i ++) a += 0.001, printf("当a等于 %f 时,精确到小数点后两位数是 %.2f \n", a , a); return 0; }运行结果:
当a等于 1.010000 时,精确到小数点后两位数是 1.0 当a等于 1.020000 时,精确到小数点后两位数是 1.0 当a等于 1.030000 时,精确到小数点后两位数是 1.0 当a等于 1.040000 时,精确到小数点后两位数是 1.0 当a等于 1.050000 时,精确到小数点后两位数是 1.0 当a等于 1.060000 时,精确到小数点后两位数是 1.1 当a等于 1.070000 时,精确到小数点后两位数是 1.1 当a等于 1.080000 时,精确到小数点后两位数是 1.1 当a等于 1.090000 时,精确到小数点后两位数是 1.1 当a等于 1.100000 时,精确到小数点后两位数是 1.1 当a等于 1.101000 时,精确到小数点后两位数是 1.10 当a等于 1.102000 时,精确到小数点后两位数是 1.10 当a等于 1.103000 时,精确到小数点后两位数是 1.10 当a等于 1.104000 时,精确到小数点后两位数是 1.10 当a等于 1.105000 时,精确到小数点后两位数是 1.11 当a等于 1.106000 时,精确到小数点后两位数是 1.11 当a等于 1.107000 时,精确到小数点后两位数是 1.11 当a等于 1.108000 时,精确到小数点后两位数是 1.11 当a等于 1.109000 时,精确到小数点后两位数是 1.11 当a等于 1.110000 时,精确到小数点后两位数是 1.11于是我们可以发现,当精度到小数点一位时,float 居然是五舍六入!!!
再看看double的表现:
#include<bits/stdc++.h> using namespace std; int main(){ double a = 1.00; for(int i = 1; i <= 10; i ++) a += 0.01, printf("当a等于 %f 时,精确到小数点后两位数是 %.1lf \n", a , a); puts(""); for(int i = 1; i <= 10; i ++) a += 0.001, printf("当a等于 %f 时,精确到小数点后两位数是 %.2lf \n", a , a); return 0; }运行结果:
当a等于 1.010000 时,精确到小数点后两位数是 1.0 当a等于 1.020000 时,精确到小数点后两位数是 1.0 当a等于 1.030000 时,精确到小数点后两位数是 1.0 当a等于 1.040000 时,精确到小数点后两位数是 1.0 当a等于 1.050000 时,精确到小数点后两位数是 1.1 当a等于 1.060000 时,精确到小数点后两位数是 1.1 当a等于 1.070000 时,精确到小数点后两位数是 1.1 当a等于 1.080000 时,精确到小数点后两位数是 1.1 当a等于 1.090000 时,精确到小数点后两位数是 1.1 当a等于 1.100000 时,精确到小数点后两位数是 1.1 当a等于 1.101000 时,精确到小数点后两位数是 1.10 当a等于 1.102000 时,精确到小数点后两位数是 1.10 当a等于 1.103000 时,精确到小数点后两位数是 1.10 当a等于 1.104000 时,精确到小数点后两位数是 1.10 当a等于 1.105000 时,精确到小数点后两位数是 1.10 当a等于 1.106000 时,精确到小数点后两位数是 1.11 当a等于 1.107000 时,精确到小数点后两位数是 1.11 当a等于 1.108000 时,精确到小数点后两位数是 1.11 当a等于 1.109000 时,精确到小数点后两位数是 1.11 当a等于 1.110000 时,精确到小数点后两位数是 1.11double 就正常了!!!
