代码之家  ›  专栏  ›  技术社区  ›  phi

为什么nsdecimalNumber.notaNumber.IntValue返回9?

  •  5
  • phi  · 技术社区  · 6 年前

    我在代码中发现了一个由 NSDecimalNumber.notANumber.intValue 返回9,我希望 NaN (AS) floatValue doubleValue 返回)。有人知道为什么吗?

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  6
  •   Damiaan Dufaux    6 年前

    就像约金·丹尼尔森提到的,在 Apple Developer Documentation

    …因为数值类型具有不同的存储能力,试图用一种类型的值初始化并访问另一种类型的值可能会产生错误的结果…

    自从斯威夫特 Int 结构不能表示NaN值,您会得到这个错误的结果。

    相反,你可以使用 int Failable Initialiser init(exactly:) 将nsdecimalNumber转换为 Int? 要么包含它的值,要么 nil 如果它不能由 int .

    let strangeNumber = NSDecimalNumber.notANumber          // nan
    let integerRepresentation = Int(exactly: strangeNumber) // nil
    
    推荐文章