ios - 简单地将带逗号的 NSString 转换为 float 或 double。

标签 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... 中那样使用字符串,无论如何,至少如果我能避免的话。

最佳答案

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

关于ios - 简单地将带逗号的 NSString 转换为 float 或 double。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22336158/

相关文章:

ios - NSAttributedString指定范围?

ios - 使用转义将 NSString 转换为 unicode

iOS7 静默推送通知不起作用

ios - 如何在应用程序中创建 Action 序列(例如 spritekit 游戏)?

iphone - 用于发布评论的 ASI HTTP 请求

ios - 使用 NSDictionaries 的 NSMutableArray 对 UITableView 进行分段

iphone - 相机 View 作为 iOS 中的 subview

ios - 从 URL 读取字节,并将二进制转换为普通十进制。对象C

ios - 'NSString' 没有可见的@interface 声明选择器 URLEncodeUsingEncoding

ios - 来自 CGContextDrawPDFPage <Error> : KSTFBB+Helvetica: FT_Load_Glyph failed: error 133 的 Apple "ZoomingPDFViewer"代码示例中的错误是什么