我的应用已拨打电话。当它用完时,值最终值有时略低于0(例如-0.003
)。我的代码:
NSString* formattedString;
NSNumberFormatter* numberFormatter;
numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:((SKProduct*)self.products[0]).priceLocale];
formattedString = [numberFormatter stringFromNumber:@(price)];
然后产生:-0.00
。这在UI上看起来很奇怪。如何才能正确舍入,以便在{0}低于零时显示0.00
?
然后,我正在寻找足够通用的东西来处理具有不同小数位数的价格格式,并留下明显的负值(例如-0.02
)未触及。
答案 0 :(得分:1)
您可以在数字格式化程序上配置某些内容,但如果没有,则可以执行以下操作:
if (fpclassify(price) == FP_ZERO)
{
price = fabs(price);
}
formattedString = [numberFormatter stringFromNumber:@(price)];
答案 1 :(得分:0)
我最终得到了:
...
double factor = pow(10, numberFormatter.maximumFractionDigits);
price = round(price * factor) / factor;
if (fpclassify(price) == FP_ZERO)
{
price = fabs(price);
}
formattedString = [numberFormatter stringFromNumber:@(price)];
但我想知道是否没有更好/更清洁的解决方案。
答案 2 :(得分:0)
这不干净,但应该可靠。
formattedString = [numberFormatter stringFromNumber:@(price)];
NSLog(@"Before correction %@", formattedString);
if ([[numberFormatter numberFromString:formattedString] floatValue] == -0.0) {
formattedString = [numberFormatter stringFromNumber:@0.0];
};
NSLog(@"After correction %@", formattedString);
这导致:
2014-04-16 15:00:05.887 APP_NAME[32121:60b] Before correction $-0.00
2014-04-16 15:00:05.890 APP_NAME[32121:60b] After correction $0.00