NSNumberFormatter numberFromString十进制数

use*_*560 2 cocoa-touch objective-c nsnumberformatter ios

我正试图解析NSString一个NSNumberFormatter像下面这样的人.

NSNumberFormatter *myFormatter = [[[NSNumberFormatter alloc] init];
NSNumber *myNumber = [myFormatter numberFromString:@"42.00000"];
Run Code Online (Sandbox Code Playgroud)

numberFromString返回NSNumber模拟器中的对象,但不返回设备上的对象.

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

我使用NSNumberFormatter的原因是因为nil如果字符串不是有效数字(它在这里对我不利,那就是它返回的方式:p).NSString doubleValue不提供这种行为.此外,NSDecimalNumber decimalNumberWithString由于[NSDecimalNumber decimalNumberWithString:@"4a2.00000"]返回4 ,因此无法完成工作.

任何想法为什么这不适用于设备?

这是现场吗?我尝试过设置myFormatter.numberStyle = NSNumberFormatterNoStyle,NSNumberFormatterDecimalStyle但它什么都没改变.

Mar*_*n R 12

正如@rmaddy在评论中已经说过的那样,小数分隔符NSNumberFormatter依赖于语言环境.如果您有一个固定的输入格式,点为小数分隔符,则可以设置"POSIX语言环境":

NSNumberFormatter *myFormatter = [[NSNumberFormatter alloc] init];
[myFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
NSNumber *myNumber = [myFormatter numberFromString:@"42.00000"];
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用NSScanner解析double值,如下所述:将NSString解析为Double