这是我的代码片段,我不知道如何舍入双数字。
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]]
答案 0 :(得分:1)
您是否尝试过使用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:
答案 1 :(得分: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%”。