2012-11-04 141 views
2

如果我使用以下代码:不正确的结果值

- (NSString*)formatToCurrency:(float)inFloat { 
    NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
    [currencyFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    [currencyFormatter setMaximumFractionDigits:2]; 
    [currencyFormatter setLocale:[NSLocale currentLocale]]; 

    NSNumber *x = [NSNumber numberWithFloat:inFloat]; 
    return [NSString stringWithFormat:@" %@", [currencyFormatter stringFromNumber:x]]; 
} 

然后调用代码时传递203500,收到输出:$ 203,500.02。

我很想听听关于正在发生的事情的一些想法。

感谢,

马特

编辑:XCode中被报告203500当我使用调试器观看它,但是当我转换的浮到一个NSString,它也将显示203500.018。这意味着问题出现在浮点数中,而不是在NSNumberFormatter中。

+0

我不能再现这个结果,我得到'203,500.00'。 – dasblinkenlight

+0

举一个@vikingosegundo的例子..参见http://stackoverflow.com/questions/856019/localize-currency-for-iphone –

+2

再试一次,只是将所有出现的'float'改为'double'。 –

回答

6
+3

对于'NSDecimal'为+1,但如果不允许小数部分美分,更好的解决方案是以美分为单位编码美元数量,并使用整数值类型来存储 – yfrancis

+0

谢谢。我完全没有理解这一点。 –

0

显然,我有很多学习这一点。但面临进一步恶化的风险,我会报告一件能帮助我的事情。

我有这个代码:

self.myDollarFormat.roundingIncrement = [NSNumber numberWithFloat:roundingInc]; 
return [self.myDollarFormat stringFromNumber:[NSNumber numberWithFloat: dollars]]; 

而且发现638198.2与roundingIncrement 0.1正在产生@ “$ 638,198.21”。

我改变了我的代码使用double而不是float,然后我得到了预期的结果。

self.myDollarFormat.roundingIncrement = [NSNumber numberWithDouble: roundingInc]; 
return [self.myDollarFormat stringFromNumber:[NSNumber numberWithDouble: dollars]]; 

我推迟那些知道更多,但我想我至少会提到这对我有效。祝你好运。