Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将NSString解析为双精度_Objective C - Fatal编程技术网

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];