Objective c 将NSString解析为双精度
所以我想把Objective c 将NSString解析为双精度,objective-c,Objective C,所以我想把NSString转换成double。我发现了以下示例: NSString * s = @"1.5e5"; NSLog(@"%lf", [s doubleValue]); 它可以工作,但是如果doubleValue无法将字符串转换为double,它只会返回0.0,这不是我需要的。我需要一些方法来尝试将double的字符串表示形式转换为double,并以某种方式指示它是否无法转换。 c#有一个很好的方法 double d; boolean Double.TryParse(str, out
NSString
转换成double。我发现了以下示例:
NSString * s = @"1.5e5";
NSLog(@"%lf", [s doubleValue]);
它可以工作,但是如果doubleValue
无法将字符串转换为double,它只会返回0.0,这不是我需要的。我需要一些方法来尝试将double的字符串表示形式转换为double,并以某种方式指示它是否无法转换。
c#有一个很好的方法
double d;
boolean Double.TryParse(str, out d)
目标C中是否有类似于上述方法的方法?或者使用正则表达式更好?但是,我真的不知道怎么做。您可以使用
NSScanner
类:
NSString *s = @"1.5e5";
NSScanner *scanner = [NSScanner scannerWithString:s];
double d;
BOOL success = [scanner scanDouble:&d];
如果要确保已扫描整个字符串(数字后没有额外字符),请使用
另一个例子是,人们认为正则表达式是万物的终极魔法解决方案,它带来了世界和平……顺便说一句,你所做的是未定义的行为。如果您使用
%lf
而不是%f
(用于float
s而不是double
s…)打印出正确的值,我不会感到惊讶。@H2CO3:根据,%f
在格式化时与float
和double
一起工作。“只有在扫描时,你才需要区分。”MartinR Strange说。在同一页的上半部分,写着NSString格式说明符支持printf()
所做的一切-对于printf,%f
用于浮点数,%lf
用于双精度,并且互换使用它们是未定义的行为。@H2CO3:我不是这方面的专家,但是声明%f
可用于双精度
。这也是我从中学到的。
BOOL isAtEnd = [scanner isAtEnd];