为什么浮点乘法显示 0


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

NSLOG 的产量为 0.0。

哼?

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

然后你乘以浮点数就是这个结果。

这里的教训是,您应该显式键入文本。C 有文字的后缀来帮助你解决这个问题。

它实际上是为人类阅读代码和编译器所针对的。

将代码从

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

最新更新