将int转换为float

时间:2010-08-27 19:19:16

标签: c visual-c++

我正在尝试将一个int添加到一个浮点数。我的代码是:

int main() {
   char paus[2];
   int millit = 5085840;
   float dmillit = .000005;
   float dbuffer;

   printf("(float)milit + dmillit: %f\n",(float)millit + dmillit);
   dbuffer = (float)millit + dmillit;
   printf("dbuffer: %f\n",dbuffer);

   fgets(paus,2,stdin);
   return 0;
 }

输出如下:

  

(float)millit + dmillit:5085840.000005
  dbuffer:5085840.000000

为什么会有区别?我也注意到如果我改变dmillit = .5,那么两个输出都是相同的(5085840.5),这就是我所期望的。为什么是这样?谢谢!

4 个答案:

答案 0 :(得分:7)

(float)millit + dmillit 评估为 double 值。当您打印该值时,它会正确显示,但是当您将其存储在 float 变量中时,精度会丢失。

答案 1 :(得分:4)

您尝试使用的精度对浮动来说太大了。在printf函数中,它被铸造成一个双待打印。

请参阅页面IEEE 754 float calculator以更好地理解这一点。

答案 2 :(得分:1)

我相信printf语句中的浮点加法可能会静默地将结果转换为double,因此它具有更高的精度。

答案 3 :(得分:1)

 printf("(float)milit + dmillit: %f\n",(float)millit + dmillit); 

我相信在这里,添加是以double形式完成的,并作为double传递给printf。

 dbuffer = (float)millit + dmillit;    
 printf("dbuffer: %f\n",dbuffer);  

这里的添加是以double形式完成的,然后缩小为浮点数以存储在dbuffer中,然后扩展回double以传递给printf。