gpt4 book ai didi

ios - 如何从 UITextField 获取带有 NSLocale smarts 的 NSNumber?

转载 作者:行者123 更新时间:2023-11-29 03:13:22 25 4
gpt4 key购买 nike

获取要显示的正确本地化数字格式很容易。但事实证明,从 UITextField 提示输入十进制数字是很棘手的。

即使小数点键盘可能会显示欧洲使用的逗号而不是停止,处理输入的方法显然仍然需要精通语言环境。

我在这里对 S.O. 的研究和其他地方建议

-(IBAction)buttonPress:(UIButton *)sender
{
NSNumber *firstNumber = @([self.firstField.text floatValue]); // 2 alternative ways
NSNumber *secondNumber = [NSNumber numberWithFloat:[self.secondField.text floatValue]];
.
.

只给我整数来执行算术运算。他们根本不是花车。它们没有 float 值

假设这是该应用唯一要做的事情,我会立即做:

.
.
NSNumberFormatter *numberFormat = [[ NSNumberFormatter alloc] init];
[ numberFormat setNumberStyle:NSNumberFormatterDecimalStyle];
[ numberFormat setLocale:[NSLocale currentLocale]];
[ numberFormat setMaximumFractionDigits:2];

NSString *displayString = [ numberFormat stringFromNumber:firstNumber];
self.resultLabel.text = displayString;
}

我将输入返回到 ViewController 中的标签,没有任何进一步处理以确保没有格式化程序不会隐藏小数点。没有喜悦。仍然是整数。

显然应用程序必须以计算的方式做一些事情,并且由于不能直接处理 NSNumber 包装器,所以我必须在进行转换之前解决它:

double xD = [firstNumber  doubleValue];
double yD = [secondNumber doubleValue];

问题是,输入的小数位在哪里丢失了?我对桌面键盘和模拟器没问题,但如果我将测试设备设置为 - 比如说 - 波兰语,那根本行不通。

编辑:这是下面提供的答案的结果

// run these 4 methods first, that way you can re-use *numberFormat for the display
NSNumberFormatter *numberFormat = [[ NSNumberFormatter alloc] init];
[ numberFormat setNumberStyle:NSNumberFormatterDecimalStyle];
[ numberFormat setLocale:[NSLocale currentLocale]];
[ numberFormat setMaximumFractionDigits:2];

// here 'tis
NSNumber *firstNumber = [numberFormat numberFromString:self.firstField.text];
// do the same for other input UITextFields
// sh-boom. there you go

最佳答案

您需要使用 longLongValue 而不是 longValue 将 NSString 转换为 long 类型。或使用 NSNumberFormatter->numberFromString:

关于ios - 如何从 UITextField 获取带有 NSLocale smarts 的 NSNumber?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986295/

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