如何将iOS价格格式从-0.00四舍五入到0.00?
我的应用程序有呼叫信用。当它用完时,值最终值有时略低于0(例如如何将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.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},一个简单的
如何?@Volkerfabs(3)
会错误地使负数为正数,而不仅仅是+-0
@MikeW(-0.<0)为false
@jasoncoo根据问题给出的问题信息,fabs()的行为可能不是problem@JasonCoco可能,但在它四舍五入之前是不可能的。这种解决方案将float
表示与表示混淆;不起作用。例如,-0.003
不是FP_ZERO
,并将显示为-0.00
,我最终使用了fpclassify()
,因此+1。