草庐IT

ios - NSNumberFormatter numberFromString 十进制数

coder 2024-01-14 原文

我正在尝试使用 NSNumberFormatter 解析 NSString,如下所示。

NSNumberFormatter *myFormatter = [[[NSNumberFormatter alloc] init];
NSNumber *myNumber = [myFormatter numberFromString:@"42.00000"];

numberFromString 在模拟器而非设备上返回一个 NSNumber 对象。

小数点 (.00000) 导致返回值在设备上为 nil,因为解析 42(没有小数点)工作正常(在模拟器和设备上)。

我使用 NSNumberFormatter 的原因是,如果字符串不是有效数字(这对我不利 :p),它会返回 nil。 NSString doubleValue 不提供这种行为。此外,NSDecimalNumber decimalNumberWithString 没有完成这项工作,因为 [NSDecimalNumber decimalNumberWithString:@"4a2.00000"] 返回 4。

知道为什么这在设备上不起作用吗?

是语言环境吗?我尝试设置 myFormatter.numberStyle = NSNumberFormatterNoStyleNSNumberFormatterDecimalStyle 但它没有任何改变。

最佳答案

正如@rmaddy 在评论中所说,NSNumberFormatter 的小数点分隔符是 取决于语言环境。如果你有一个固定的输入格式,以点作为小数点分隔符, 您可以设置“POSIX 语言环境”:

NSNumberFormatter *myFormatter = [[NSNumberFormatter alloc] init];
[myFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
NSNumber *myNumber = [myFormatter numberFromString:@"42.00000"];

或者,您可以使用 NSScanner 来解析 double 值,例如描述 这里:parsing NSString to Double

关于ios - NSNumberFormatter numberFromString 十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413605/

有关ios - NSNumberFormatter numberFromString 十进制数的更多相关文章

随机推荐