Objective-C中的计算

Objective-C中的计算,objective-c,cocoa,math,operators,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,在整数数学中是

有谁能解释一下,为什么它应该返回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

或者,如果变量
a
b
c
中的任何一个(或多个)是一个
float
(或对其进行转换),则等式也会起作用


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

,这是因为您的数学都使用整数

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

实际上,您已经在表达式中加了过括号,结果的求值顺序导致了整数舍入问题

如果您刚刚编写了公式,那么它会很好地工作:

progress = 100 * (c - a) / (b - a);
因为100*(c-a)首先计算2500,然后除以60得到41

或者,如果变量
a
b
c
中的任何一个(或多个)是一个
float
(或对其进行转换),则等式也会起作用


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

a
b
c
都是
int
s。当您计算
((c-a)/(b-a))
时,结果也是
int
;实际值是一个十进制数(0.42),但
int
不能取十进制数,因此它舍入到
0
,然后乘以
100
,得到
0

a
b
c
int
s。当您计算
((c-a)/(b-a))
时,结果也是
int
;实际值是一个十进制数(0.42),但
int
不能取十进制数,因此它舍入到
0
,然后乘以
100
,得到
0

因为
(c-a)/(b-a)
是使用
整数数学计算的

要固定,请在分割前将其转换为浮动:

progress = (int)((((float)(c - a)) / ((float)(b - a))) * 100);
因为
(c-a)/(b-a)
是使用
整数数学计算的

要固定,请在分割前将其转换为浮动:

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

c-a将为您提供25

b-a将为您提供60

因为
a
b
c
都是整数,这意味着它们不能是小数。因此,通过执行
(c-a)/(b-a)
,您将得到0,而不是0.41666666,因为在整数除法中,小数点之后的任何内容都将被截断,将数字保留在小数点之前

要使其按您希望的方式工作,您应该尝试将
(c-a)
(b-a)
转换为双倍或浮动:

进度=((浮动)(c-a)/(浮动)(b-a))*100


进度=((双倍)(c-a)/(双倍)(b-a))*100

c-a
会给你25分

b-a将为您提供60

因为
a
b
c
都是整数,这意味着它们不能是小数。因此,通过执行
(c-a)/(b-a)
,您将得到0,而不是0.41666666,因为在整数除法中,小数点之后的任何内容都将被截断,将数字保留在小数点之前

要使其按您希望的方式工作,您应该尝试将
(c-a)
(b-a)
转换为双倍或浮动:

进度=((浮动)(c-a)/(浮动)(b-a))*100


进度=((双倍)(c-a)/(双倍)(b-a))*100

Xcode是一个编辑器,不是计算器。我知道,我只是用它来测试一些东西,但Xcode仍然没有运行代码或进行一些计算。这只是一个IDE,所以你最初的标题有点糟糕。公平地说,我明白你的观点,现在它确实更有意义了,干杯!Xcode是一个编辑器,不是计算器。我知道,我只是用它来测试一些东西,但Xcode并没有运行你的代码或做一些计算。这只是一个IDE,所以你最初的标题有点糟糕。公平地说,我明白你的观点,现在它确实更有意义了,干杯!