我刚刚解决了我在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...
。)
答案 0 :(得分:3)
在第一种情况下,你划分两个整数(64和38),它们给你一个整数值(1)。 要纠正这一点,你不必将结果值更改为浮点数(这只会将整数结果64转换为浮点数),但至少需要一个除法运算符。
int first = value * ( (float) 64 / 38)
这应该给你107作为结果