2013-02-04 102 views
0

說我有以下值對於這些高德:的iOS:NSDecimalNumber:沒有得到預期的結果

的NSString *百分比= 35 的NSString *值= 146

在我的代碼下面我期待着得到51.1當我做我的乘(146 * 0.35),而是我得到100

- (NSDecimalNumber*) getProductByPercentage : (NSArray*) itemsToMultiply : (float) annualPatients { 

    //get items from array 
    NSString* percentage = [itemsToMultiply objectAtIndex:0]; 
    NSString* value = [itemsToMultiply objectAtIndex:1]; 

    //init a number formatter 
    NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
    //set its formatting style 
    [f setNumberStyle:NSNumberFormatterDecimalStyle]; 

    //convert to percentage 
    float thisPercentage = [percentage floatValue]/100; 

    //convert to NSDecimal 
    NSDecimalNumber* decPercentage = [[NSDecimalNumber alloc] initWithString:[NSString stringWithFormat:@"%f", thisPercentage]]; 
    NSDecimalNumber* decAvgReimbursement = [[NSDecimalNumber alloc] initWithString: value]; 
    NSDecimalNumber* decAnnualPatients = [[NSDecimalNumber alloc] initWithString:[NSString stringWithFormat:@"%f", annualPatients]]; 

    //set up handler 
    NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain 
      scale:-2 
      raiseOnExactness:NO 
      raiseOnOverflow:NO 
      raiseOnUnderflow:NO 
      raiseOnDivideByZero:NO 
    ]; 

    //get our results 
    NSDecimalNumber* decAvgCost = [decAvgReimbursement decimalNumberByMultiplyingBy:decPercentage 
                   withBehavior:handler]; 

    NSLog(@"%@::%@::%@", decAvgCost, decAvgReimbursement, decPercentage); 

    return decAvgCost; 
} 

這裏是我的日誌輸出

2013-02-04 13:57:46.960 EUS Calculator[34154:c07] 100::146::0.35 

我的處理程序出現錯誤的結果嗎?

+0

可能重複:http://stackoverflow.com/questions/2576109/nsdecimalnumber-multiplication-strangeness –

回答

2
scale:-2 

你設置的規模四捨五入到-2小數,這是最接近100

+1

我(顯然)誤解了,我在想-2會讓我達到最接近的100。謝謝,它現在正在工作。 – PruitIgoe

1

你正在向錯誤的比例四捨五入。嘗試將刻度更改爲0(刪除小數點)並重試。如果您想要1位小數,請使用1;那麼你應該得到51.1。

1

更改此:

float thisPercentage = [percentage floatValue]/100; 

這樣:

float thisPercentage = [percentage floatValue]/100.0; 

如果你不把3.0,那麼編譯器將其解釋爲一個整數,浮點做/ INT時它會將其轉換爲int,將您期望的0.35轉換爲0.

此外,您並未在任何地方使用NSNumberFormatter,因此您甚至可能不會創建它。

爲什麼你使用NSDecimalNumbers呢?

+0

這最終被轉換爲貨幣 – PruitIgoe

相關問題