iphone - NSNumberFormatter 和舍入百分比值

标签 iphone objective-c nsdecimalnumber

这是我的代码片段,我不知道如何舍入双数。

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/

相关文章:

iphone - 从 Nib 加载 View 不会初始化 socket - Monotouch

ios - 读取字典元素的预期方法在 'id<NSFastEnumeration,NSObject>' 类型的对象上找不到

objective-c - 将 NSDecimalNumber 转换为 NSString

iphone - 如何使 UILabel 用自动布局填充可用空间?

iphone - 归档有关符号链接(symbolic link)的 iOS 项目时出错

iphone - 如何在 iOS 设备上创建新的 EKCalendar?

objective-c - 需要一个类似于日志 View 的 View

ios - 将 NSDecimalNumber 转换为 NSString 时,NSNumberFormatter 舍入不正确

ios - NSNumberFormatter 不接受小数点后的零

iphone - 如何检查 ios 的互联网连接类型