这是我的情况。它让我疯狂:
我有一个NSMutableArray,其计数值为517.我有一个双倍值,这是我的乘数。
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!)
这对任何人都有意义吗?
附录:
这是我的实际功能:
- (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
}
答案 0 :(得分:1)
好吧,当我开始遇到这些问题时,我看了一下,没有找到任何理由或解释。
我现在所做的是让一切都变为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
}
希望它有所帮助。