目标C浮动和分裂

时间:2012-10-19 05:25:10

标签: objective-c

嗨我怀疑使用花车进行划分, 这里测试代码::

- (void)chuza
{

    float option1 = 0;
    float option2 = 0;


    option1 = 100/50;
    option2 = 50/100;

    NSLog(@"option1 :: %f",option1);
    NSLog(@"option2 :: %f",option2);

}

所以, 我明白了:

2012-10-19 16:21:45.405 Project[2023:14f03] option1 :: 2.000000
2012-10-19 16:21:45.405 Project[2023:14f03] option2 :: 0.000000

所以我的问题是: 为什么浮动会像

时那样
  

分母>分子

但不喜欢

  

分子>分母??

谢谢!

3 个答案:

答案 0 :(得分:5)

这对我来说很像integer division,因为你要划分两个整数。当划分两个整数(在大多数情况下,如果不是所有编程语言中)时,忽略除法的其余部分。

考虑如何评估该行。首先计算整数除法,然后将整数结果强制转换为浮点数,以存储在float变量中。

请注意,整数根本不存储任何小数,所以即使0.999作为整数也是0.这不是关于舍入的问题。

这也不是关于分子大于分子的分母。尝试除以100/30,结果将是3,而不是3.33333 ..因为它将用于浮动除法。

您可以通过将数字转换为浮点数或确保它们是浮点数来解决此问题。

铸造

option2 = ((float)50/(float)100);

划分花车

option2 = 50.0f/100.0f;

答案 1 :(得分:3)

10050都不是浮点数,它们是整数。这意味着您正在进行整数除法并将结果分配给浮点变量。由于整数除法截断(抛弃小数结果),50/100产生0。 100可以被50整除,这就是你获得2.000000结果的原因。使用75100来尝试您的计划,您会看到工作的内容多于该部门的指导方向。

答案 2 :(得分:2)

它将你的数字视为整数,执行除法,然后将结果放入浮点数。

尝试此选项2 = 50.0f / 100;