objective-c divide总是返回0

Pau*_*art 18 operations objective-c divide

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

float p1 = (6 / 100);
NSLog(@"p1 = %f", p1);
Run Code Online (Sandbox Code Playgroud)

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

p1 = 0.000000

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

Poi*_*nty 35

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

float p1 = (6.0 / 100.0);
Run Code Online (Sandbox Code Playgroud)

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

float p1 = (6.0f / 100.0f);
Run Code Online (Sandbox Code Playgroud)

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

  • 如果它回答了你的问题,你应该接受答案. (4认同)

小智 12

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

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

float p1 = (6.0 / 100);
Run Code Online (Sandbox Code Playgroud)

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

float p1 = ((float)6 / 100);
Run Code Online (Sandbox Code Playgroud)


小智 9

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

float p1 = (6.0f / 100.0f);
Run Code Online (Sandbox Code Playgroud)