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则可能是决定单向或最佳参数的最佳参数其他.
小智 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)
归档时间: |
|
查看次数: |
12685 次 |
最近记录: |