【问题标题】:NSString's method doubleValue gives unexpected resultsNSString 的方法 doubleValue 给出了意想不到的结果
【发布时间】:2010-09-21 09:46:39
【问题描述】:

我需要将 NSString 转换为 double。如果这个字符串本质上是整数,那么结果是可以的。如果字符串是十进制的,也许还有组分隔符,那么结果是错误的。字符串中位于首位的任何分隔符之王(无论是“.”还是“,”)始终用作小数分隔符。

我试图用 NSScanner 做一些事情,但我就是不明白如何解决这个问题。

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

如果能得到任何帮助,我将非常高兴。

提前致谢!

【问题讨论】:

  • 还发布一些您迄今为止尝试过的代码。

标签: iphone objective-c nsstring


【解决方案1】:

[string doubleValue] 和常规的NSScanner 始终使用. 作为小数分隔符。本地化的NSScanner 使用当前语言环境中的小数分隔符。但两人都对字符分组一无所知,因此不合适。

您必须使用NSNumberFormatter 来执行此操作。正如@Gobra 所说,最好在界面生成器中进行设置。但您也可以在如下代码中执行此操作:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我假设你在谈论 NSNumberFormatter?我看不出如何在 IB 中“将其放到文本字段中”。
    • 正确,只需将其拖到 NSTextField 实例上,它应该接受放置。
    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 2017-01-05
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2021-04-22
    • 2016-02-13
    相关资源
    最近更新 更多