如何将iOS价格格式从-0.00舍入到0.00?

时间:2014-04-16 06:31:17

标签: ios in-app-purchase nsnumberformatter

我的应用已拨打电话。当它用完时,值最终值有时略低于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)未触及。

3 个答案:

答案 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