Ios 如何使用NSLocale smarts从UITextField获取NSNumber?

Ios 如何使用NSLocale smarts从UITextField获取NSNumber?,ios,objective-c,localization,Ios,Objective C,Localization,获取要显示的数字的正确本地化格式很容易。 但事实证明,提示从UITextField输入十进制数是很棘手的 尽管十进制小键盘可能会在欧洲使用逗号而不是停止符,但处理输入的方法显然仍然需要精通语言环境 我在S.O.和其他地方的研究表明 -(IBAction)buttonPress:(UIButton *)sender { NSNumber *firstNumber = @([self.firstField.text floatValue]); // 2 alternative ways NSNum

获取要显示的数字的正确本地化格式很容易。 但事实证明,提示从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

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

我应该加上获取常规输入,然后转换为NSNumber同样是徒劳的。方法不知道逗号是什么是!LongValue并没有为我做这件事,但NSNumberFormatter->numberFromString:做得很好。呵呵!既然它向我指出了这一点,那么很明显会出现NSNumberFormatter->stringFromNumber:方法的相反情况。为什么我以前没看到?为了其他蚱蜢的利益,我将添加一个代码修改