【问题标题】:Simple convert NSString with comma to float or double.简单地将带有逗号的 NSString 转换为浮点数或双精度数。
【发布时间】:2014-03-11 20:39:53
【问题描述】:

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

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

假设NSString有一个逗号,如5,4。我可以轻松地将其转换为floatusing:

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... 那样使用字符串,至少如果我可以避免的话。

【问题讨论】:

  • 您不应该为数字格式化程序设置区域设置。让它默认为用户的语言环境,这样它就可以解析用户输入的数字。

标签: ios objective-c nsstring nsnumber nsnumberformatter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 2020-02-03
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多