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

即使十进制小键盘可能会显示逗号(而不是停止符)供欧洲使用,但显然,处理输入的方法仍需精通语言环境。

我在S.O.上的研究其他地方建议

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


只给我整数以执行算术运算。它们根本不是浮游物。它们没有浮点值

假设这是应用程序唯一要做的事情,我立即这样做:

.
.
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智能的NSNumber?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21986295/

10-10 20:46