C语言编程:float精度问题

继续昨天的问题~~~
#include "stdio.h"
void main()
{
float a;
printf("习题3.10:\n");
printf("要求把一个实数拆分成整数和小数部分!");
printf("请输入一个实数:");
scanf("%f",&a);
printf("%g=%d+%g\n",a,int(a),a-int(a));
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

输入:1.2得1+0.2
输入:12.34得12+0.34
输入:123.456得123+0.456001
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
已证实是float精度问题,把float改成double,把%f改成%lf就行了!

但是,float的范围不是-3.4x10的-38次方到3.4x10的38次方么?
123.456难道不在这个范围?到底是怎么回事?

#include<stdio.h>
void main(void){
float a;
printf("习题3.10:\n");
printf("要求把一个实数拆分成整数和小数部分!");
printf("请输入一个实数:");
scanf("%f",&a);
printf("%g=%d+%g\n",a,(int)a,a-(int)a);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-23
%f的精度是六位小数点啊,你那个应该可以的

c语言中float型的精度问题
取值范围 3.4*10^38 有效数字只有 7 到 8 个。例如:float a=123.456789;float b=123456789.0;printf("%20.8f\\n",a);printf("%20.8f",b);打出:123.45678711 -- 后3位不精确 123456792.00000000 -- 前7位精确,92 开始不对了。

c语言中float精度问题
浮点数不是连续值,有一定精度,特点是动态范围大。它还没有int的精度高,因为int是32位表示,float只有23位有效值,其他是符号位和指数。既然计算得不到12.10,就是浮点数不能精确表示12.10。 c = 12.099998精度也很高了,只差0.000002,差值很小了 ...

c语言中float型的精度问题
浮点数不是连续值,有一定精度,特点是动态范围大。它还没有int的精度高,因为int是32位表示,float只有23位有效值,其他是符号位和指数。既然计算得不到12.10,就是浮点数不能精确表示12.10。c = 12.099998精度也很高了,只差0.000002,差值很小了 ...

c语言float类型精度是多少位
float类型默认保留小数点后6位,若是要输出一位或者其他位数,可以按照以下形式进行输出:printf("%.(这里输入要输出的位数)f",x);如输出一位:printf("%.1f",x);

C语言入门,float精度不懂
1.首先理解核心语句。第一句:定义浮点型变量 a,然后把浮点型常量复制给a;第二句:输出格式符,并要求输出的数为浮点型常量(%f为格式说明符的一种)。这样你运行后就会在屏幕中出现一个数字,验证是否符和题目要求。2.0.1999999是十进制,十进制换成二进制(1和0组成二进制),然后你会发现其中的奥秘&...

C语言中浮点数float和double输出的问题
float的精度是6到7位,就是说连整数部分有6位是可信的,再长了就是机器垃圾值了;double有16到17位是可信的,再多了也是机器垃圾值。下面的代码可说明这一问题。float型x的值从第8位2开始就是垃圾值了,尽管要求输出小数点后10位;double型y的值从第18位起也是垃圾值,尽管要注输出了小数点后20...

c语言float精确到几位
float f = 1234560.991f;printf("%f",f);return 0;} 输出结果是:1234561.000000 例2:include<stdio.h> int main () { float f = 1.913757f;printf("%.10f",f);return 0;} 输出结果是1.9137569666,对比,只有5位小数是精确的,答案还是6位。综上,所以精确度是6位,意思是前6位...

如何让float变量精确到小数点后两位
在C语言中,当需要控制浮点变量的输出精度到小数点后特定位数时,可以利用数据类型和格式化输出函数来实现。首先,确保你的变量是单精度(float)或双精度(double)类型,因为这些类型支持精确的小数表示。对于输出,可以借助printf函数,它允许我们指定格式化字符串,以此来控制输出的精度。在printf的格式字符串中...

C语言 double;float输出精度问题求解
在C\/C++中,浮点型float用32位二进制表示,十进制有效数位为7位;double用64位二进制表示,十进制有效数位为16位。值得注意的是,无论 float还是double型,在机内都是按double运算的,区别只在输出时的有效位数不同。当一个数的实际长度不足要求的位数时,计算机会自动补足——但通常是一个随机数而...

float精度问题求解
从第一位非0的数字开始,后面的全部叫有效数字 例如 100:3个有效数字 1.0001:5个有效数字 0.001:1个有效数字 0.0010:2个有效数字 10x10^3:2个有效数字,1和0,后面的10^3不算 float里有23个有效数字,但是这23个有效数字是二进制的不是十进制的。换算成10进制以后就差不多是6~7个...

相似回答