为什么浮点乘法显示为0

时间:2015-01-13 04:20:55

标签: objective-c floating-point uiscreen

float yLimit = [[UIScreen mainScreen] bounds].size.height;
yLimit = yLimit * (2/3);
NSLog(@"ylimit: %f", yLimit);

nslog产生0.0。

咦?

2 个答案:

答案 0 :(得分:6)

换句话说,2和3是隐式整数类型。当⅔除法发生时,你得到整数除法。零。没有剩余。没有四舍五入。

然后你将浮动乘以该结果。

这里的教训是你应该明确地输入你的文字。 C有文字的后缀来帮助你解决这个问题。

对于人类阅读代码而言,它与编译器的实际意图一样多。

答案 1 :(得分:1)

更改您的代码

yLimit = yLimit *(2/3);

yLimit = yLimit * 2/3;

2/3分裂发生时,您获得0。 (零)然后0乘以yLimit得到0

2/3相当于Int / Int,这会产生提问者所期待的Int而不是DoubleFloat

嗯,yLimit * (2/3)结果为yLimit * 0,结果为2/3 = 0.6666666667,但由于隐式整数类型,它会转到0