objective c float值

问题描述:

为什么我们不能将两个整数的除法结果存储到float变量中?objective 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; 

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

之所以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在你的例子)到float类型的变量。实质上,在将值转换为浮点值时,您已经丢失了您正在查找的信息(假设您想要执行浮点除法),并且转换不会使其返回。

为了得到你想要的(同样,假设你想要做一个浮点除)的结果,你需要你把前操作数的至少一个转换为float

+0

任何人都知道这个编译器行为背后的原因?显然,大量的整数组合会产生一个非整数值,所以编译器会假设你想在每种情况下返回一个整数,这似乎很奇怪。 – 2016-09-28 22:32:28

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

我想你会得到。 :) – 2011-04-08 10:59:31

+0

你......:D ...... – Maulik 2011-04-08 11:08:39

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

您将需要使用花车,无论你从int投或与他们开始达您。

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

+0

雅但临时变量是浮动,所以为什么结果被截断,而温度能够存储浮动值? – Maulik 2011-04-08 11:11:13

+0

因为在Objective-C'/'中对整数参数执行整数除法,因此4/5四舍五入为0,3/2四舍五入为1,依此类推。在执行分割之前,您可能想要将一些数字转换为浮点形式。 – visakh7 2011-04-08 11:13:41

下面的语句的意思,你是铸造的整数值到浮点盯着操作前

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

因此可以被看作是下面

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

然后

float temp = 50.0/100.0 ; 

而且结果

temp = 0.5;