首先搞清楚计算机是用二进制存储形式存储内容的,一个字节是8个二进制位。一个float、double、long double类型即单精度浮点类型、双精度浮点类型和长双精度浮点类型在32位系统下面的存储空间分别为4字节、8字节和12字节,也就是32个二进制位、64个二进制位和96个二进制位,因此他们能保存的小数点后面的位数的能力也是大相径庭的,位数越多能保存的小数点后面的位数也就越多,位数不够保存不了的计算机会自动舍弃后面几位!这样也就能解释你的问题啦。不好意思啊,解释得不是很专业不过应该是能懂的就行啦~
#include
int main()
{
float fFloatStyle = 987654321.123456789;
double dDoubleStyle = 987654321.123456789;
long double lDoubleStyle = 987654321.123456789;
printf("%f\n",fFloatStyle);
printf("%f\n",dDoubleStyle);
printf("%lf\n",lDoubleStyle);
return 0;
}
float 数字范围是-3.4*10(-38)----- 3.4 * 10 (38)
double -1.7 * 10(-38)-----1.7 * 10(308)
long double -1.2 * 10 (-4932) -------1.2 * (104932)
其中括号表示次方