我需要将NSString转换为double。如果此字符串本质上是整数,则结果为OK。如果string是十进制,也可能是组分隔符,则结果为false。任何分隔符之王(无论是“。”还是“,”)字符串中的第一个字母始终用作小数分隔符。
我曾尝试使用NSScanner做一些事情,但我根本不明白如何解决这个问题。
想法如下:无论我输入textfield整数,还是带或不带组分隔符的十进制数,我想得到正确的十进制数。
我很乐意得到任何帮助。
提前致谢!
答案 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]创建转换并使用它转换值。