Objective-C中的计算
有谁能解释一下,为什么它应该返回42的值,却一直返回0?它是写在纸上的,所以我知道数学是正确的,我只是想知道为什么它没有翻译过来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,在整数数学中是
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
,此时表达式的结果也将是一个floata
,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,所以你最初的标题有点糟糕。公平地说,我明白你的观点,现在它确实更有意义了,干杯!