使用逗号将NSString简单转换为float或double。

时间:2014-03-11 20:39:53

标签: ios objective-c nsstring nsnumber nsnumberformatter

我有一个屏幕,用户可以在其中输入一些信息。它显示decimalPad。根据用户locale,我知道decimalPad会显示commaperiod,甚至是其他内容。

因此,我的数据库将包含从用户存储的NSStrings,但是,其中一些将使用逗号,如5,4或句点,如5.4中所示。问题是我需要用这些值做一些数学运算,而我找不到转换它们的模式。

让我们说NSString有逗号,如5,4所示。我可以使用:

轻松将其转换为float
NSNumberFormatter *commas = [NSNumberFormatter new];
commas.numberStyle = NSNumberFormatterDecimalStyle;
NSLocale *commaLocale = [[NSLocale alloc] initWithLocaleIdentifier: @"br_PT"];
commas.locale = commaLocale;

NSString *string = @"5,4";
float testFloat = [[commas numberFromString:string] floatValue];

我正确地得到了结果5.4,并且可以继续我的数学计算。但是,例如,如果该号码是由美国用户保存的,则NSString将为5.4,并且使用此代码我将无法获得正确的结果。即使我获得用户当前的语言环境,它也没有帮助我,因为用户将获得存储的值。

无论如何,我对此有点困惑。我怎么能简单地创建一个模式来处理这个?

我不想像stringByReplacingOccurences...一样使用字符串,至少如果我可以避免这种情况。

1 个答案:

答案 0 :(得分:1)

如果要将该值用作数字,则应将该值存储为数据库中的数字。 NSNumber是一个完美的对象,通过您的方法,您可以获得正确的价值。当您再次向用户显示该值时,您应该使用NSNumber再次转换NSNumberFormatter。其他一切都将成为一种解决方法并产生负面影响。即使使用stringByReplacingOccurences...,您也有可能使用千点或逗号......