Objective-C中的计算

f.p*_*ion 1 math cocoa objective-c operators

任何人都可以向我解释为什么当它应该返回42值时它会一直返回0?它在纸上工作所以我知道数学是正确的我只是想知道它为什么不翻译?

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

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

    NSLog(@"Progess = %d %%",progress);
Run Code Online (Sandbox Code Playgroud)

Aln*_*tak 8

这是因为你的数学都是使用整数.

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

实际上,您的表达式过度括号,结果的评估顺序导致整数舍入问题.

如果您刚刚编写公式,那就可以了:

progress = 100 * (c - a) / (b - a);
Run Code Online (Sandbox Code Playgroud)

因为100*(c - a)首先评估为2500,然后将其除以60得到41.

替代方案,如果您的变量中的任何一个(或多个),或者是(或投入)变量a,那么该等式也将起作用.bcfloat

这是因为一个表达式,其中任一操作数是一个float会造成其他(整数)的操作数被提升到一个float也是如此,在该点,表达式的结果也将是一个float.