gpt4 book ai didi

cocoa - 在 cocoa 中与货币作斗争

转载 作者:行者123 更新时间:2023-12-03 16:08:15 24 4
gpt4 key购买 nike

我正在尝试做一些我认为相当简单的事情:让用户输入美元金额,将该金额存储在 NSNumber (NSDecimalNumber?)中,然后稍后再次以货币格式显示该金额。

我的麻烦并不是 setNumberStyle:NSNumberFormatterCurrencyStyle 和将 float 显示为货币。问题更多在于所说的 numberFormatter 如何与这个 UITextField 一起工作。我能找到几个例子。 This thread从 11 月开始和 this one给我一些想法,但给我留下了更多问题。

我正在使用 UIKeyboardTypeNumberPad 键盘,并且了解我可能应该在显示时在字段中显示 $0.00(或任何本地货币格式),然后当用户输入数字以移动小数位时:

  • 开始显示 0.00 美元
  • 点击 2 键:显示 $0.02
  • 点击 5 键:显示 0.25 美元
  • 点击 4 键:显示 2.54 美元
  • 点击 3 键:显示 25.43 美元

然后 [numberFormatter numberFromString:textField.text] 应该给我一个可以存储在 NSNumber 变量中的值。

可悲的是,我仍在挣扎:这真的是最好/最简单的方法吗?如果是这样,也许有人可以帮助我实现?我觉得 UITextField 可能需要一个委托(delegate)来响应每个按键,但不确定什么、在哪里以及如何实现它?!有示例代码吗?我将不胜感激!我到处寻找……

Edit1: 所以我正在研究 NSFormatter 的 stringForObjectValue: 以及我能找到的最接近 benzado 推荐的内容:UITextViewTextDidChangeNotification。很难找到其中任何一个的示例代码...所以请告诉我您是否知道在哪里查找?

最佳答案

我的解决方案:


- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
// Clear all characters that are not numbers
// (like currency symbols or dividers)
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
[_amount release];
_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];
[_currencyFormatter release]
// Since we already wrote our changes to the textfield
// we don't want to change the textfield again
return NO;
}

关于cocoa - 在 cocoa 中与货币作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/593230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com