【问题标题】:How to detect Infinity values in Scala?如何在 Scala 中检测无穷大值?
【发布时间】:2013-06-17 08:44:10
【问题描述】:

Scala 有Double.isNaN 用于检测非数字,但没有Double.isInf 用于检测(正或负)无穷大。

为什么?我想检查一个参数是否是一个“实”数(即有一个数值)。将其转换为字符串并检查“inf”之类的就可以了,但一定有更好的方法吗?

就像在 C++ 中一样:http://en.cppreference.com/w/cpp/numeric/math/isinf

使用 Scala 2.10

【问题讨论】:

    标签: scala scala-2.10


    【解决方案1】:

    Scala 的Double 有一个isInfinite 方法和Neg/Pos 变体:

    scala> val a = 22.0
    a: Double = 22.0
    
    scala> a.isInfinite
    res0: Boolean = false
    
    scala> val b = 2.0/0
    b: Double = Infinity
    
    scala> b.isInfinite
    res1: Boolean = true
    
    scala> b.isPosInfinity
    res4: Boolean = true
    

    【讨论】:

    • 谢谢。不知道我怎么错过了。
    • @akauppi 也许是因为 REPL 不会自动完成它。我看到 Eclipse 会提供它。
    • @som-snytt 哦,好点。 IDEA 确实展示了它们。 (我也认为 Netbeans 插件)
    【解决方案2】:

    其他人都说过,加上这个:单独的isNaN的原因是与NaN的比较是特殊的:

    scala> val bar = Double.NaN
    bar: Double = NaN
    
    scala> bar == Double.NaN
    res0: Boolean = false
    

    没有这样的规则适用于无穷大,因此不需要特殊的检查功能(除了为了处理符号的方便):

    scala> val foo: Double = Double.PositiveInfinity
    foo: Double = Infinity
    
    scala> foo == Double.PositiveInfinity
    res1: Boolean = true
    

    【讨论】:

    • 谢谢。我觉得有点令人困惑的是 Double.PositiveInfinity 使用了(太)长的措辞,而 Double.isPosInfinity 使用了较短的措辞。
    【解决方案3】:

    方法实际上是存在的。它只是称为isInfinity 而不是isInf

    请参阅 RichDouble 第 36 行的 scaladocs:https://github.com/scala/scala/blob/v2.10.2/src/library/scala/runtime/RichDouble.scala#L36

    【讨论】:

      猜你喜欢
      • 2015-03-22
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2022-08-12
      • 2019-03-19
      • 2017-11-03
      • 2016-08-13
      • 2010-11-14
      相关资源
      最近更新 更多