c语言中的简单问题!

来源:百度知道 编辑:UC知道 时间:2024/06/30 03:00:50
#include<stdio.h>
int main(void)
{
double a = 123456.789098765;
float b;
long c;
short i,j;
b=a; c=a; i=a;j=c;
printf ("a=%f,b=%f,c=%d,i=%d,j=%d\n,"a,b,c,i,j);
return 0;
}
运行结果为:a=123456.789099, b=123456.789063,c=123456,i=-7616,j=-7616
刚学C语言不久,上面的运行结果看不懂!急切希望哪位能帮我解决!谢谢了!!
主要是b=123456.789063这个输出结果不懂,精度是怎么减少到8位的,FLOAT型精度不是7位吗!希望说详细点!

因为你已经把a的值赋给b啦,而a的类型是double型的,不同类型间转换,必须向优先级靠拢,而double比float优先级高,所以b也会变成double型。

double 和float都是保留小数点后6位
我刚才试了下,把a 定义为float的话 出来的a的结果是 123456.789063 ,所以呢 应该是当执行语句 float(b) = doublle(a) 的时候,由于double的类型长 所以只能截6位 就截成了 123456.789063 所以b 就是123456.789063