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;
你正在做在b
和a
整数除法,然后存储所产生的整数(0在你的例子)到float
类型的变量。实质上,在将值转换为浮点值时,您已经丢失了您正在查找的信息(假设您想要执行浮点除法),并且转换不会使其返回。
为了得到你想要的(同样,假设你想要做一个浮点除)的结果,你需要你把前操作数的至少一个转换为float
。
int a = 100;
int b =50;
float temp = (float)b/a;
我想你会得到。 :) – 2011-04-08 10:59:31
你......:D ...... – Maulik 2011-04-08 11:08:39
其整数除法 - 50/100为0,其余的(可以使用模数)为50。
您将需要使用花车,无论你从int投或与他们开始达您。
下面的语句的意思,你是铸造的整数值到浮点盯着操作前
float temp = (float)b/(float)a;
因此可以被看作是下面
float temp = (float)50/(float)100;
然后
float temp = 50.0/100.0 ;
而且结果
temp = 0.5;
任何人都知道这个编译器行为背后的原因?显然,大量的整数组合会产生一个非整数值,所以编译器会假设你想在每种情况下返回一个整数,这似乎很奇怪。 – 2016-09-28 22:32:28