客观c浮动值

时间:2011-04-08 10:57:16

标签: objective-c c

为什么我们不能将两个整数的除法结果存储到float变量中?

int a = 100;
int b =50;
float temp = b/a;

它给出t = 0!

我也做了

int temp = b/a;

它给出t = 0!

但是当我做的时候

float temp = (float)b / (float)a;

它给出了正确的结果。为什么这样?

5 个答案:

答案 0 :(得分:22)

float temp = b/a;给出0而float temp = (float)b/a;给出0.5的原因是编译器根据操作数的类型而不是目标存储类型确定除法运算的输出类型。简单地说:

int   /   int = int
float /   int = float
int   / float = float
float / float = float

所以当你float temp = b/a;执行ba的整数除法时,然后将得到的整数(在你的例子中为0)存储到{{1}的变量中{1}}。本质上,当值转换为浮点时,您已经丢失了所需的信息(假设您想要进行浮点除法),并且转换不会将其恢复。

为了获得您想要的结果(再次假设您想要进行浮点除法),您需要在之前将至少一个操作数强制转换为float >你分裂。

答案 1 :(得分:3)

int a = 100;
int b =50;
float temp = (float)b/a;

答案 2 :(得分:3)

其整数除法 - 50/100为0,余数(可以使用模数)为50.

你需要使用浮点数,无论你是从int转换还是从它开始都取决于你。

答案 3 :(得分:3)

以下语句表示,您在调整操作之前将整数值转换为float

float temp = (float)b / (float)a;

所以可以看作如下

float temp = (float)50 / (float)100;

然后

float temp = 50.0 / 100.0 ;

结果

temp = 0.5;

答案 4 :(得分:2)

在你的情况下,50/100是0.2。通过获得两个整数的结果,结果也将是整数形式,因此它截断小数部分,仅给出0。但是在浮动的情况下,它被认为是一个浮动区域,所以你会得到0.2