使用NSUInteger的奇怪行为 – 无法正确转换为浮动

这是我的情况。 它让我疯狂:

我有一个NSMutableArray,其计数值为517.我有一个double值,这是我的乘数。

double multiplier = 0.1223; double result = [myArray count] * multiplier; // 63 even (wrong!) 

实际上它应该是63.2291。 如果我走:

 double result = [myArray count] * 0.1223; // 63.2291 (right!) 

要么..

 double result = 517 * multiplier; // 63.2291 (right!) 

这对任何人都有意义吗?

附录:

这是我的实际function:

 - (double) getValueForPercentage:(double)percVal { int adjustedCount = [originalData count] - 1; double final = percVal * (double)adjustedCount; return final; } 

当我这样做时,我从未得到超过小数点的任何数字。 然而,如果我摆脱“-1”,a-la,它确实有效:

 - (double) getValueForPercentage:(double)percVal { int adjustedCount = [originalData count]; double final = percVal * (double)adjustedCount; return final; } 

当然,我需要-1。

第二个附录:

我注意到的另一个有趣的事情是,如果我将一个硬编码的数字传递给这个函数它工作正常,但如果我传递我需要使用的double值,它会失败:

 int pointCount = [srcData getDayCount]; for (int i = 0; i < pointCount; i++) { double progress = (double)i/(double)(pointCount - 1); double satv = [srcData getValueForPercentage:progress]; // satv is always a number without any digits beyond the decimal } 

好吧,当我开始遇到这些问题时,我环顾四周,发现没有理由或解释。

我现在做的是让所有东西都成为NSNumber,然后在上面调用doubleValue。 这应该会产生您正在寻找的结果:

 NSNumber * pointCount = [NSNumber numberWithUnsignedInt: [srcData getDayCount]]; for (NSInteger i = 0; i < [pointCount intValue]; i++) { NSNumber * count = [ NSNumber numberWithInt: i ]; double progress = [count doubleValue]/[pointCount doubleValue] - 1.0; double satv = [srcData getValueForPercentage:progress]; // satv is always a number without any digits beyond the decimal } 

希望能帮助到你。