这是我的代码片段,我不知道如何舍入双数。
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]]
最佳答案
您是否尝试过使用 NSDecimalNumber 提供的算术运算?
我自己没有尝试过,但您似乎通过在数字实例的双值上使用标准运算符(*、/、...)来绕过 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:
的文档
关于iphone - NSNumberFormatter 和舍入百分比值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1971573/