NSString的方法doubleValue给出了意想不到的结果

时间:2010-09-21 09:46:39

标签: iphone objective-c nsstring

我需要将NSString转换为double。如果此字符串本质上是整数,则结果为OK。如果string是十进制,也可能是组分隔符,则结果为false。任何分隔符之王(无论是“。”还是“,”)字符串中的第一个字母始终用作小数分隔符。

我曾尝试使用NSScanner做一些事情,但我根本不明白如何解决这个问题。

想法如下:无论我输入textfield整数,还是带或不带组分隔符的十进制数,我想得到正确的十进制数。

我很乐意得到任何帮助。

提前致谢!

2 个答案:

答案 0 :(得分:6)

[string doubleValue]和常规NSScanner始终使用.作为小数点分隔符。本地化NSScanner使用当前区域设置中的小数分隔符。但是两个人都不知道如何对字符进行分组,因此它们是不合适的。

您必须使用NSNumberFormatter来执行此操作。最好在界面构建器中设置它,因为@Gobra说。但您也可以在以下代码中执行此操作:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle: NSNumberFormatterDecimalStyle];
double value = [[formatter numberFromString: string] doubleValue];

如果您需要知道字符串是否有效,您可以在发送NSNumber消息之前检查numberFromString:返回的nil对象是否为doubleValue

答案 1 :(得分:0)

由于您提到了文本字段,我认为问题在于将一些数值绑定到NSTextField。这里正确的方法是使用NSValueFormatter,IB调色板中有一个可自定义的数字格式器。只需将其放入文本字​​段并设置规则即可。

即使任务与UI无关,您仍然可以使用[NSValueTransformer valueTransformerForName:aName]创建转换并使用它转换值。