在Objective-C中将货币字符串转换为浮点数

neb*_*uto 5 objective-c nsstring nsnumberformatter ios swift

我的目标很简单,我有一个存储本地化货币值的文本字段(例如$ 1,000.00),我需要从文本字段中取回该值作为浮点数来对文本字段执行某些测试.

代码非常简单,首先我将NSNumber格式化为localizedString,如下所示:

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
textfield.text = [formatter stringFromNumber:number];
Run Code Online (Sandbox Code Playgroud)

一切正常,但我做相反的事情从这个本地化的字符串得到doubleValue:

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.numberStyle = NSNumberFormatterCurrencyStyle; //also tested with NSNumberFormatterDecimalStyle

double d = [formatter numberFromString:textfield.text].doubleValue;
Run Code Online (Sandbox Code Playgroud)

问题是格式化程序只返回我的字符串的整数值而不是小数,更糟糕的是,如果它是加拿大本地化字符串(20 000,00 $),它只返回20.

我一直在寻找一段时间,但却找不到任何关于这种行为的信息.解决方法当然是在将NSNumber格式化之前存储到文本字段然后测试这个nsnumber,但我真的不觉得它很漂亮.

neb*_*uto 1

正如朱塞佩指出的,答案非常简单,我因为没有考虑这个问题而把头撞在墙上。

double d = [NSDecimalNumber decimalNumberWithString:textfield.text locale:[NSLocale currentLocale]].doubleValue;
Run Code Online (Sandbox Code Playgroud)