【问题标题】:Getting 'nan' when inserting method in stringWithFormat在 stringWithFormat 中插入方法时获取“nan”
【发布时间】:2010-12-30 04:57:29
【问题描述】:

为了便于理解和纠正错误,我简化了一些方法。我得到一个'nan'而不是得到数字,不明白为什么。我想将 getNumber 方法放在 return 语句中。当我将方法放入其中时,它返回一个 nan 字符串,但是当我将 26 放入其中时,它返回 26,这是我想要的。

-(double) getNumber { return 26; }


-(NSString *) convertToString {
        return [NSMutableString stringWithFormat: @"%Lf",[self getNumber]];
// returns 'nan'           when I replace [self getNumber] with 15 I get 15
}

【问题讨论】:

    标签: objective-c nan


    【解决方案1】:

    您的代码中有几个问题。

    1. getNumber 中返回双精度值,而不是整数。虽然会发生自动强制,但请编写干净的代码。
    2. 使用%g 格式说明符,而不是%Lf%g 用于双打。

    【讨论】:

    • 我认为 %Lf 用于长双打, %f 用于双打。是不是不准确?
    • 确实不准确。 %f 用于 32 位 float 数字。此外,你没有长双,你有一个双。为此,您使用%g
    • 您可以使用 e,f 或 g 来格式化双精度。对于是否(以及何时)使用指数符号,它们的约定略有不同。见developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
    • float 在可变参数列表中被提升为double,因此%f%g 都适用于任一类型。
    • @jer: %f 和 %g 都对双精度和浮点数进行操作。 %g 只使用 %f 或 %e 格式,以使用较少的空间为准。
    【解决方案2】:

    您可能希望使用“%f”而不是“%Lf”,因为您传递的是double,而不是long double

    【讨论】:

    • 谢谢!我把它改成了 long double,因为这就是我在其他地方使用的,很好的捕获
    【解决方案3】:

    这是您的格式说明符。您应该使用 "%g" 来格式化双精度。

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多