objective-c - Objective-C 中的计算

标签 objective-c cocoa math operators

谁能向我解释一下为什么它应该返回值 42 时却一直返回 0?它在纸上有效,所以我知道数学是正确的,我只是想知道为什么它不能翻译?

    int a = 60;
    int b = 120;
    int c = 85;
    int progress;

    progress = ((c-a)/(b-a))*100;

    NSLog(@"Progess = %d %%",progress);

最佳答案

这是因为你的数学全部使用整数。

特别是,您的内部表达式正在计算 25/60,在整数数学中为零。

实际上,您的表达式过度括号,并且计算结果的顺序导致整数舍入问题。

如果你这样写公式的话,效果会很好:

progress = 100 * (c - a) / (b - a);

因为 100 * (c - a) 首先会计算为 2500,然后除以 60 得到 41。

另一种选择,如果变量 abc 中的任何一个(或多个)是 float code>(或强制转换)该等式也有效。

这是因为其中任一操作数为浮点的表达式将导致另一个(整数)操作数提升为浮点,同样,此时表达式的结果也将是 float

关于objective-c - Objective-C 中的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10250566/

相关文章:

objective-c - 当我从 UITableViewController 打开自定义 UIView 时,如何关闭自定义 View 并返回 TableView ?

ios - 使用自定义对象初始化自定义 UITableViewCell

objective-c - 同时在两台计算机上处​​理核心数据存储(或确保它同时仅在一台计算机上打开)

ios - Metal :iPhone 5/iOS 8 上为 "Failed creating a default system device!"

ios - cocoapod 设置/安装错误

macos - 如何将 NSWindow 绑定(bind)到另一个 NSWindow?

macos - Swift for OsX WebFrameLoadDelegate 不起作用

algorithm - 前n个数的最大奇数之和

math - 需要梯度下降数学实现解释。

php - 字节到千兆字节的转换不起作用