在c语言中如何查看一个float类型的变量小数点后有几位数?

如题所述

可以查看,(例如,用sprintf, 转成字符串,一个字符一个字符地统计。)但得到的结果不一定可靠,或不是期望的。

原因是 计算机内部用 2进制,我们输入输出用 10进制。 10进制到2进制,小数部分常 “化不净”,2进制再转回10进制,又 “化不净”。

float类型的变量,精度只有 6-7 位有效数字,超出7 位又引进 “截断误差”。

例如:

float x = 0.0000000000000000012300;   眼睛可以看出有20位小数,不是22位小数。

但通过计算机,化不净,引进 截断误差:

printf("%g\n",x);  //1.23e-018    --- 这个可以,18+2位得 20

printf("%.15g\n",x);  // 1.22999999327834e-018   -- 这个 不行了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-02
可以查看,(例如,用sprintf, 转成字符串,一个字符一个字符地统计。)但得到的结果不一定可靠,或不是期望的。

原因是 计算机内部用 2进制,我们输入输出用 10进制。 10进制到2进制,小数部分常 “化不净”,2进制再转回10进制,又 “化不净”。
float类型的变量,精度只有 6-7 位有效数字,超出7 位又引进 “截断误差”。
例如:
float x = 0.0000000000000000012300; 眼睛可以看出有20位小数,不是22位小数。
但通过计算机,化不净,引进 截断误差:
printf("%g\n",x); //1.23e-018 --- 这个可以,18+2位得 20
printf("%.15g\n",x); // 1.22999999327834e-018 -- 这个 不行了。
相似回答