如题。 大概总结下精度损失。谢谢。
è¿ç®ç»ææ¯0ã
è¿æ¯å 为3/2æ¯ä¸ä¸ªæ´åæ°å¸¸é表达å¼ï¼æ´åæ°å¸¸é表达å¼æç¼è¯å¨è®¡ç®æºè¿è¡çç»æï¼3/2çåæ¯1ãè¿æ¯ç¼è¯å¨è®¡ç®åºæ¥ç3/2è¿ä¸ªå¸¸é表达å¼çå¼ï¼ä½æ¯printf()è¦è¾åºæ ¼å¼ä¸º%fï¼å³è¾åºä¸ä¸ªå精度浮ç¹æ°ãå¨Cè¯è¨ä¸æµ®ç¹æ°ä½¿ç¨çæ¯IEEE754ç¼ç ï¼ä¹å°±æ¯è¯´ä¸ä¸ª32ä½çintç±»åçæ°1ï¼ä½¿ç¨IEEE754ç¼ç æ表示çæ°å¼æ¯å¤å°çé®é¢ãå¯ä»¥ç¼åå¦ä¸ä»£ç ï¼
#include <stdio.h>int main()
{
int i = 1;
float f = *(float *) &i;
printf("%f\n", f);
return 0;
}
è¿è¡ç»æä¸é®é¢ä¸ç printf("%f\n", 2/3)æ¯ä¸æ ·çï¼é½ä¸º0ã
è¦è·å¾æ£ç¡®çç»æï¼åºè¯¥å¯¹æ´å常é表达å¼è¿è¡å¼ºå¶ç±»å转æ¢:
printf("%f\n", (float)(3/2));
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2017-09-22
终于找到了,前面的一大段我就略去了,从这开始:
f 接受浮点或者双精度值并将它转换为十进制符号表示法,格式为 [-] ddd.ddd。基数字符(在这里显示为十进制点)后的数字位数等于规定的精度。 LC_NUMERIC 语言环境编目确定在这个格式中使用的基数字符。如果不指定精度,则输出六个数字。如果精度是 0(零),将不显示基数字符。
恩,有点难理解,我的理解是这样的:整型的精度无疑就是0,所以在转换的时候直接就不显示基数字符了。也就是说无论你给什么样的整型,你以浮点数输出的话都会得到0.000000。
f 接受浮点或者双精度值并将它转换为十进制符号表示法,格式为 [-] ddd.ddd。基数字符(在这里显示为十进制点)后的数字位数等于规定的精度。 LC_NUMERIC 语言环境编目确定在这个格式中使用的基数字符。如果不指定精度,则输出六个数字。如果精度是 0(零),将不显示基数字符。
恩,有点难理解,我的理解是这样的:整型的精度无疑就是0,所以在转换的时候直接就不显示基数字符了。也就是说无论你给什么样的整型,你以浮点数输出的话都会得到0.000000。
参考资料:
本回答被提问者采纳第2个回答 2011-07-27
%f 的意思就是我的结果是float型。1.500000
第3个回答 2011-07-26
1.000000
这有个隐形转换的!!
这有个隐形转换的!!
第4个回答 2011-07-26
答案是1.0