2009-12-28 66 views
2

這裏是我的代碼片段,我不知道如何舍入雙數。NSNumberFormatter和舍入百分比值

double m = [tmpProduct.msrp doubleValue] ; 
double d = [tmpProduct.discountPrice doubleValue]; 
double p = (d * 100)/m; 

這裏tmpProduct.msrp和mpProduct.discountPrice是(NSDecimalNUmber *)

從操作上面我P = 44.995757

我想將它轉化成(45%),怎麼辦我那樣做?

這裏是我使用,但沒有幫助。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:2]; 
[formatter setRoundingMode: NSNumberFormatterRoundDown]; 
[formatter stringFromNumber:[NSNumber numberWithDouble:p]] 

回答

1

您是否嘗試過使用NSDecimalNumber提供的算術運算?
我還沒有嘗試過自己,但它似乎是通過使用標準運算符(*,/,...)在數字實例的double值上繞過NSDecimalNumber的優點。
看看NSDecimalNumber: Performing Arithmetic

由於Objective-C中不支持運算符重載,你將不得不使用的方法,如:

- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber 

更新:
司使用NSDecimalNumber:

NSDecimalNumber* operandOne = [NSDecimalNumber decimalNumberWithString:@"1234.5"]; 
NSDecimalNumber* operandTwo = [NSDecimalNumber decimalNumberWithString:@"2335"]; 
NSDecimalNumber* result = [operandOne decimalNumberByDividingBy:operandTwo]; 
NSLog(@"%@", [result descriptionWithLocale:[NSLocale currentLocale]]); 

通過使用descriptionWithLocale:,你得到正確的NSLocaleDecimalSeparator

更新2:
我忘了取整:
NSDecimalNumber支持幾種舍入模式。
閱讀的decimalNumberByRoundingAccordingToBehavior:

+0

thanks for reply.i試過這個 NSDecimalNumber * d1 = [tmpProduct.discountPrice decimalNumberByDividingBy:tmpProduct.msrp]; 但這給我例外(這裏是價值我得到discounprice = 1234.5和masrp是2335) – Nnp 2009-12-28 21:37:54

+0

沒有運氣與此? – Nnp 2009-12-28 23:52:25

+0

我用一個小例子更新了我的答案,它使用了您粘貼的值。在這裏工作很好。也許你可以發佈更多細節?你使用核心數據/綁定等...? – 2009-12-29 09:39:54

1

的文檔在這種特殊情況下,我建議設置風格NSNumberFormatterPercentStyle和最大小數位數爲0,然後你不應該擔心的舍入。這適用於我:

double p = d/m; // note: not multiplying by 100 here 

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterPercentStyle]; 
NSString *s = [formatter stringFromNumber:[NSNumber numberWithDouble:p]]; 

這給出字符串「45%」。