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

如何将iOS价格格式从-0.00四舍五入到0.00?,ios,in-app-purchase,nsnumberformatter,Ios,In App Purchase,Nsnumberformatter,我的应用程序有呼叫信用。当它用完时,值最终值有时略低于0(例如-0.003)。我的代码: NSString* formattedString; NSNumberFormatter* numberFormatter; numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [numberF

我的应用程序有呼叫信用。当它用完时,值最终值有时略低于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.00


然后,我正在寻找一些足够通用的东西,它可以处理具有不同小数位数的价格格式,并且保持明显的负值(例如,
-0.02
)不变。

您可以在数字格式化程序上配置一些东西,但如果没有,您可以这样做:

if (fpclassify(price) == FP_ZERO)
{
    price = fabs(price);
}
formattedString = [numberFormatter stringFromNumber:@(price)];
我的结局是:

...

double factor = pow(10, numberFormatter.maximumFractionDigits);
price = round(price * factor) / factor;
if (fpclassify(price) == FP_ZERO)
{
    price = fabs(price);
}

formattedString = [numberFormatter stringFromNumber:@(price)];

但我想知道是否有更好/更清洁的解决方案。

这不是清洁的,但应该是可靠的

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

如果(value<0){value=0},一个简单的
如何?@Volker
fabs(3)
会错误地使负数为正数,而不仅仅是
+-0
@MikeW(-0.<0)为
false
@jasoncoo根据问题给出的问题信息,fabs()的行为可能不是problem@JasonCoco可能,但在它四舍五入之前是不可能的。这种解决方案将
float
表示与表示混淆;不起作用。例如,
-0.003
不是
FP_ZERO
,并将显示为
-0.00
,我最终使用了
fpclassify()
,因此+1。