【问题标题】:Swift .isNaN Understand how it worksSwift .isNaN 了解它是如何工作的
【发布时间】:2018-10-22 08:06:39
【问题描述】:

我目前在理解 .isNan 的工作原理方面遇到问题。

我正在维护一个不是我自己开发的应用程序(在 Swift 2.3 中)。

这段代码造成了大量的崩溃,据我了解,我不明白是怎么回事。

这里是方法,它只是一种格式方法,以便通过测试不同的情况为您的标签设置适当的值。

    static func formatFloat(float: Float?, withMaxDigits
max: Int, andUnit unit: String) -> String {

            var label: String = "-"

            if let float = float {

                let numberFormatter = NSNumberFormatter()
                numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
                numberFormatter.minimumFractionDigits = 0
                numberFormatter.maximumFractionDigits = max
                numberFormatter.roundingMode = .RoundHalfUp

                if !float.isNaN {
                    var formattedValue = numberFormatter.stringFromNumber(float)!
                    if(formattedValue == "-0")
                    {
                        formattedValue = "0"
                    }
                    label = "\(formattedValue) \(unit)"
                }
            }

            return label
        }

我是否正确,它只是检查以确定一个值是否为 NaN,以便测试所有内容并相应地设置文本?

我阅读了一些帖子/文档,但我不明白:

在某些语言中 NaN != NaN,但在 Cocoa 中并非如此。

nil 和 NaN 呢?我的意思是 isNan 检查是否正确?

【问题讨论】:

  • 你已经知道float 不是零,因为它是有条件地展开的。就个人而言,我会有条件地打开 stringFromNumber 而不是强制它并删除 isNaN 测试
  • 所以没有 isNan 测试的 var formattedValue = numberFormatter.stringFromNumber!(float) 更干净?
  • 是的,但是if let formattedValue = numberFormatter.stringFromNumber(float) {...
  • 你的意思是 if var no ?我无法为 let 常量赋值。

标签: ios swift


【解决方案1】:

IEEE 浮点规范记录了表示 NaN 无效结果的某些位模式。

nil 与 NaN 不同。在 Swift 中,只有 optional 可以包含 nil,它表示没有值。

NaN 表示您执行了一些导致无效结果的操作。您应该检查 isNaN 属性以查看数字是否包含 NaN。

编辑:

请注意,有不同的值被标记为NaN,因此一个.NaN 值可能不等于另一个.NaN

【讨论】:

    【解决方案2】:

    不,nan 是浮点可以采用的值。 nil 只能由可选变量使用。另外我不确定你从哪里得到的报价,但.nan == .nan 是错误的。更多信息请阅读https://developer.apple.com/reference/swift/floatingpoint

    【讨论】:

    • “将 NaN 与任何值(包括另一个 NaN)进行比较,结果为 false。”谢谢你的那部分
    猜你喜欢
    • 2013-08-28
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2015-04-15
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多