objective-c - (Obj-)C 中的 BEDMAS 优先级?

标签 objective-c c math floating-point

我刚刚解决了我在 iOS 应用程序中遇到的一个相当奇怪的问题。我需要对传递给方法的值应用比例因子(我计算为 64/38 ~= 1.684)。

我的问题的症结如下:

- (void)applyScaleTo:(int)value {

    // value := 64
    int first = value * (64/38)
    NSLog(@"First: %d", first);
    int second = (64 * value)/38;
    NSLog(@"Second: %d", second);

}

所需的值为 107,但日志如下所示:

First: 64
Second: 107

我的解决方案是使用第二种方法,这很好,但我的问题是,为什么会出现这种差异? (顺便说一下,如果 first 更改为 float,它仍然记录为 64.00000...。)

最佳答案

在第一种情况下,您将两个整数(64 和 38)相除,得到一个整数值 (1)。 要更正您不必将结果值更改为 float (这只会将您的整数结果 64 转换为 float ),但至少要有一个除法运算符。

int first = value * ( (float) 64 / 38)

结果应该是 107

关于objective-c - (Obj-)C 中的 BEDMAS 优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13719502/

相关文章:

ios - objective-C : appending a NSString to NSException reason

objective-c - cocos2d mac项目全屏模式下警报窗口位于主窗口下方

c - 链表中指针的操作

c - 在C中输出两个二进制字符串及其十进制值相加的结果

Python:克莱因瓶的 3D 图

objective-c - 如何在同步后正确处理 UI 刷新

ios - 在 UIScrollView 滚动时暂停任何操作

c - 如何在函数中将文本扫描为字符串?

java - 如何舍入到下一个整数?

c++ - 有概率的程序