为什么浮点乘法显示为0
Why is float multiplication showing 0
float yLimit = [[UIScreen mainScreen] bounds].size.height;
yLimit = yLimit * (2/3);
NSLog(@"ylimit: %f", yLimit);
nslog 产生 0.0。
嗯?
换句话说,2 和 3 是隐式整数类型。当 ⅔ 除法发生时,您将得到整数除法。零。没有余数。没有舍入。
然后你乘以一个浮点数就是那个结果。
这里的教训是你应该明确地键入你的文字。 C 有文字后缀来帮助你。
它实际上是为人类阅读代码和为编译器准备的。
更改您的代码
yLimit = yLimit *(2/3);
至
yLimit = yLimit *2/3;
当出现 2/3
除法时,您会得到 0
。 (零)然后 0
乘以 yLimit
得到 0
2/3
等同于 Int
/Int
,结果是 Int
而不是提问者的 Double
或 Float
期待。
嗯,yLimit * (2/3)
结果为 yLimit * 0
,如 2/3 = 0.6666666667
,但由于隐式整数类型
,它四舍五入为 0
float yLimit = [[UIScreen mainScreen] bounds].size.height;
yLimit = yLimit * (2/3);
NSLog(@"ylimit: %f", yLimit);
nslog 产生 0.0。
嗯?
换句话说,2 和 3 是隐式整数类型。当 ⅔ 除法发生时,您将得到整数除法。零。没有余数。没有舍入。
然后你乘以一个浮点数就是那个结果。
这里的教训是你应该明确地键入你的文字。 C 有文字后缀来帮助你。
它实际上是为人类阅读代码和为编译器准备的。
更改您的代码
yLimit = yLimit *(2/3);
至
yLimit = yLimit *2/3;
当出现 2/3
除法时,您会得到 0
。 (零)然后 0
乘以 yLimit
得到 0
2/3
等同于 Int
/Int
,结果是 Int
而不是提问者的 Double
或 Float
期待。
嗯,yLimit * (2/3)
结果为 yLimit * 0
,如 2/3 = 0.6666666667
,但由于隐式整数类型
0