【问题标题】:Formatting a dollar amount in real time实时格式化美元金额
【发布时间】:2013-02-19 20:05:51
【问题描述】:

我正在开发一个要求用户输入美元金额的 iOS 应用。它需要允许他们输入最大值为 $9999.99 的美元和美分

我希望它像这样工作: 有一个文本字段显示:“$ 0.00” 输入 $5.25 输入将随着每次按键而改变。 所以它看起来像这样: '5'被按下,显示:$0.05 '2' 被按下,显示:$0.52 '5'被按下,显示:$5.25

我尝试了多种不同的方式来完成这项工作,但都存在问题。 使用 NSNumberformatter 无法正常工作。如果用户按下退格键,使用链接列表或数组将不起作用,我真的不想实现堆栈,因为我担心它会太耗时。请告知我应该如何解决这个问题。谢谢

【问题讨论】:

  • 我认为您只需格式化字符串蛮力并显示它,在每次按下按钮后更新。
  • 你能解释一下吗?
  • NSNumberFormatter 可以很好地解决这个问题(这在许多应用程序中很常见)。也许发布您如何尝试使用它,有人可以指出错误。

标签: iphone ios objective-c mobile


【解决方案1】:

这只是一个指示性示例,说明如何执行此操作。您应该研究此代码并根据您的情况重新调整它。试试看:

@autoreleasepool
{
    // Here I create the formatter and I set the format. You do this faster with setFormat: .
    NSNumberFormatter* formatter=[[NSNumberFormatter alloc]init];
    formatter.numberStyle= NSNumberFormatterCurrencyStyle;
    formatter.maximumIntegerDigits=6;
    formatter.maximumFractionDigits=2;
    formatter.currencySymbol= @"$";
    formatter.currencyDecimalSeparator= @".";
    formatter.currencyGroupingSeparator= @",";
    formatter.positivePrefix=@"";

    NSArray* numbers= @[ @1 ,@2 ,@3 ,@4, @5, @6, @7, @8  ];
    // These are the inserted numbers, you should change the code in a way that
    // every number is taken in input from the text field.
    float number=0.0f;
    for(NSUInteger i=0;i<8;i++)
    {
        // It just simulates what happens if the user types the numbers in the array.
        number= [numbers[i] floatValue] * 1.0e-2 + number*10;
        NSLog(@"%@",[formatter stringFromNumber: @(number)]);
    }
}

【讨论】:

  • Tanner 没有尝试以美元和美分格式化数字。他想要一个 UITextField 可以在用户输入和删除字符时动态格式化。
  • 足以将此代码重新调整为从文本字段输入的字符串。
【解决方案2】:
NSString* formattedAmount = [NSString stringWithFormat:@"$%01d.%02d",dollars,cents];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2020-10-09
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    相关资源
    最近更新 更多