首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

int型乘以float型結果为何小了,

2012-10-18 
int型乘以float型結果为何小了,请教各位。#include stdlib.h#include string.h#include stdio.hint m

int型乘以float型結果为何小了,请教各位。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(){
  int a = 10; 
  int b = 10; 
  float cc = 2.6;
  float dd = 2.4;
  int x = (cc*a);
  int y = b*dd;
  printf("x=%d,y=%d\n",x,y);
  return 0;
}

如上程序,为什么我用2.4*10得到的int值是24,而用2.6*10得到的int值却是25,而不是26?

[解决办法]
cc的值是2.59999999,这转为整数将是25
[解决办法]
这个精度的误差被你放大了而已。
[解决办法]
float cc = 2.6,其内部可能是2.59999999,相乘的结果就是25.9999999,取整就是25了
[解决办法]

C/C++ code
int x = (cc*a);//2.5999999*10    int y = b*dd;//2.4000001*10
[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)

[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

[解决办法]
探讨
C/C++ code


int x = (cc*a);//2.5999999*10
int y = b*dd;//2.4000001*10

[解决办法]
探讨

既然大家都说float cc = 2.6,其内部可能是2.599999,那我怎么做,才能得到我想要的值呢?2.6*10=26.
再者,float dd = 2.4其内部为什么不是2.399999?

[解决办法]
探讨

既然大家都说float cc = 2.6,其内部可能是2.599999,那我怎么做,才能得到我想要的值呢?2.6*10=26.
再者,float dd = 2.4其内部为什么不是2.399999?

[解决办法]
一个float或者double如果要向上取整,那么就将它加0.5,然后再转型为int即可。

热点排行