在 Objective-C 中将货币字符串转换为浮点数
Posted
技术标签:
【中文标题】在 Objective-C 中将货币字符串转换为浮点数【英文标题】:Convert currency string into float in Objective-C 【发布时间】:2012-11-14 12:55:28 【问题描述】:我的目标很简单,我有一个存储本地化货币值(例如 $1,000.00)的文本字段,我需要从文本字段中获取该值作为浮点数,以便对文本字段执行一些测试。
代码非常简单,首先我将 NSNumber 格式化为本地化字符串:
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
textfield.text = [formatter stringFromNumber:number];
一切正常,但是我做相反的事情来从这个本地化字符串中获取 doubleValue:
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.numberStyle = NSNumberFormatterCurrencyStyle; //also tested with NSNumberFormatterDecimalStyle
double d = [formatter numberFromString:textfield.text].doubleValue;
问题是格式化程序只返回我的字符串的整数值而不是小数,更糟糕的是,如果它是加拿大本地化字符串(20 000,00 $)它只返回 20。
我已经搜索了一段时间,但找不到有关此行为的任何信息。解决方法当然是在将 NSNumber 格式化为文本字段之前存储它,然后测试这个 nsnumber,但我真的不觉得它漂亮。
【问题讨论】:
你可以看到 [Obtaining an NSDecimalNumber from a locale specific string][1] about [1]: ***.com/questions/317311/… 【参考方案1】:在 Swift 中,您可以通过类似的方式将语言环境设置为货币格式,然后获取双精度:
var locale = NSLocale.currentLocale()
var formatter = NSNumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US")
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
var moneyDouble = formatter.numberFromString(textField.text)?.doubleValue
【讨论】:
【参考方案2】:正如 Giuseppe 指出的那样,答案非常简单,我因为没有考虑而将头撞到了墙上。
double d = [NSDecimalNumber decimalNumberWithString:textfield.text locale:[NSLocale currentLocale]].doubleValue;
【讨论】:
如果您的原始价格字符串包含货币符号(例如:@"$9.99"),那么 zvtra 的答案是正确的(使用 NSNumberFormatter)。【参考方案3】:对 zavtra 的回答稍加改进,返回一个浮点数并且不强制语言环境标识符为 en_US
(Swift 2):
func floatFromTextFieldText() -> Float
let formatter = NSNumberFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
guard let amount = self.text else return 0.0
return formatter.numberFromString(amount)!.floatValue
【讨论】:
以上是关于在 Objective-C 中将货币字符串转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章