如何在ios上正确格式化货币

Fra*_*eau 36 iphone numbers currency formatter ios

我正在寻找一种方法来将字符串格式化为货币而不使用TextField hack.

例如,我想将数字"521242"转换为"5,212.42"或者如果我的数字低于1 $,我希望它看起来像这样:"52" - >"0.52"

谢谢

idz*_*idz 66

你可能想要这样的东西(假设货币是浮动的):

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:currency]];
Run Code Online (Sandbox Code Playgroud)

根据您的要求将52视为.52,您可能需要除以100.0.

这种方法的好处是它将尊重当前的语言环境.因此,在适当的情况下,它会将您的示例格式化为"5.212,42".

更新: 在发布我的例子时,我或许有点快.正如下面Conrad Shultz所指出的,在处理货币金额时,最好将数量存储为NSDecimalNumbers.这将极大地减少带有舍入误差的麻烦.如果你这样做,上面的代码片段变为(假设货币是a NSDecimalNumber*):

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
NSString *numberAsString = [numberFormatter stringFromNumber:currency];
Run Code Online (Sandbox Code Playgroud)

  • 永远不要使用浮子来获得准确的值(特别是货币)!使用NSDecimalNumber/NSDecimal. (30认同)
  • @idz当然 - 这就是为什么你需要一个政策来处理这些案件.但是使用浮动*会在某个时刻中断,并且当你最不期望它时.当你使用货币时,每一分钱都很重要,浮动是不可接受的.(FWIW,`NSDecimalNumber`非常轻巧;我甚至从未见过任何问题,即使是实时进行数千次计算也是如此.) (2认同)

AAV*_*AAV 12

我用这个代码.这对我有用

1)将UITextField Delegate添加到头文件

2)添加此代码(启用ARC)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

NSString *cleanCentString = [[textField.text
                              componentsSeparatedByCharactersInSet:
                              [[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
                             componentsJoinedByString:@""];
// Parse final integer value
NSInteger centAmount = cleanCentString.integerValue;
// Check the user input
if (string.length > 0)
{
    // Digit added
    centAmount = centAmount * 10 + string.integerValue;
}
else
{
    // Digit deleted
    centAmount = centAmount / 10;
}
// Update call amount value
NSNumber *amount = [[NSNumber alloc] initWithFloat:(float)centAmount / 100.0f];
// Write amount with currency symbols to the textfield
NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
[_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[_currencyFormatter setCurrencyCode:@"USD"];
[_currencyFormatter setNegativeFormat:@"-¤#,##0.00"];
textField.text = [_currencyFormatter stringFromNumber:amount];
return NO; }
Run Code Online (Sandbox Code Playgroud)

  • 永远不要使用浮子来获得准确的值(特别是货币)!使用NSDecimalNumber/NSDecimal. (7认同)

Bil*_*han 6

swift 2.0版本:

    let _currencyFormatter : NSNumberFormatter = NSNumberFormatter()
    _currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    _currencyFormatter.currencyCode = "EUR"
    textField.text = _currencyFormatter.stringFromNumber(amount);
Run Code Online (Sandbox Code Playgroud)