【问题标题】:of objective C floats and divisions目标 C 浮动和除法
【发布时间】:2012-10-19 05:25:09
【问题描述】:

嗨,我对使用浮点数进行除法有很大的疑问, 这里是测试代码::

- (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

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

分母>分子

但不喜欢

分子>分母??

谢谢!

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    在我看来,这很像 integer division,因为你是在除以两个整数。将两个整数相除时(在大多数编程语言中,如果不是全部的话)会忽略除法的余数。

    想想这条线是如何被评估的。首先计算整数除法,然后将整数结果转换为浮点数以存储在浮点变量中。

    请注意,整数根本不存储任何小数,因此即使 0.999 作为整数也会为 0。四舍五入不是问题。

    这也不是关于分母大于分子的问题。尝试除以 100/30,结果将是 3,而不是 3.33333.. 就像浮点除法一样。

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

    铸造

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

    分割浮点数

    option2 = 50.0f/100.0f;
    

    【讨论】:

      【解决方案2】:

      10050 都不是浮点数,它们是整数。这意味着您正在进行整数除法并将结果分配给浮点变量。由于整数除法会截断(丢弃小数结果),50/100 产生0。 100 可以被 50 整除,这就是您得到 2.000000 结果的原因。使用75100 尝试您的程序,您会发现除了部门的发展方向之外,还有更多工作要做。

      【讨论】:

        【解决方案3】:

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

        试试这个选项2 = 50.0f/100;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-12
          • 2020-02-13
          相关资源
          最近更新 更多