objective-c divide总是返回0

时间:2010-09-13 16:46:17

标签: objective-c operations divide

发生了一些非常奇怪的事情。

float p1 = (6 / 100);
NSLog(@"p1 = %f", p1);

使用这两行代码,我得到以下输出:

p1 = 0.000000

为什么一个简单的静态数字不能正常工作!我有很多工作要做,以处理分裂不工作!他到底是什么,我疯了吗?

4 个答案:

答案 0 :(得分:35)

这些常量是整数,所以数学是用整数数学完成的。尝试

float p1 = (6.0 / 100.0);

编辑 - @Stephen Canon明智地指出,由于“p1”是float,因此没有理由不将整个计算作为float

float p1 = (6.0f / 100.0f);

现在,由于这些事情都是常量,我认为无论如何编译工作都很有可能完成。这也是事实,因为在一些现代机器(即英特尔架构)上,浮点处理器指令集非常奇怪,看起来像一个明显的“优化”的东西可能会或可能不会那样。最后,我认为可能是这样的情况:使用float常量进行操作可能(在某些情况下)给出一个不同的结果,即使用double值进行操作然后进行转换到float,如果这是真的可能是决定这种或那种方式的最佳论据。

答案 1 :(得分:12)

由于这两个数字都被计算机视为整数,因此执行整数运算并返回一个整数,其中没有小数为0(0.06),然后转换为float并存储在变量p1中。

当你向计算机追加一个小数时,至少有一个数字(或两者)必须浮动才能进行浮点数学运算。你告诉计算机该常数是一个浮点数。

float p1 = (6.0 / 100);

或者你可以对它进行类型转换

float p1 = ((float)6 / 100);

答案 2 :(得分:9)

您的作业包含一个整数除法,如果您除以的数字更大,则返回零。你可能打算这样做:

float p1 = (6.0f / 100.0f);

答案 3 :(得分:1)

解决两个int变量并得到浮点结果的工作。

int x = 5;
int y = 7;

float z = x / y;  // always 0

修复

float z = 1.0 * x / y;

注意:如果您更改订单,此解决方案将无法正常工作。

修改 根据这个答案previous answer你可以使用这个

float z = (float) x / y;