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

scala的bigdecimal类中的doublevalue函数是什么

  •  0
  • RAGHHURAAMM  · 技术社区  · 6 年前

    scala中的bigdecimal类包含一个doublevalue函数。双精度是64位大小…但BigDecimal可以包含任意位数和小数点后任意位数。

    我试着在scala repl中查看它返回了什么。

    实际上,在编写程序时,查找bigdecimal的平方根以提供平方根的初始猜测是很有用的。我怀疑一个double如何存储一个bigdecimal。有人能澄清一下吗?

    scala> BigDecimal("192837489983938382617887338478272884822843716738884788278828947828784888.1993883727818837818811881818818"
    )
    res6: scala.math.BigDecimal = 192837489983938382617887338478272884822843716738884788278828947828784888.199388372781883781881
    1881818818
    
    scala> res6.doubleValue()
    res7: Double = 1.928374899839384E71
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Alexey Romanov    6 年前

    它相当于Java的 method with the same name 记录如下:

    将此BigDecimal转换为Double。此转换类似于Java语言规范中定义的从double到float的缩小原语转换:如果此bigdecimal有太大的幅度表示为double,则它将被转换为double.negative_infinity或double.positive_infinity(视情况而定)。请注意,即使返回值是有限的,此转换也可能丢失有关bigdecimal值精度的信息。

    它似乎并没有这么说,但它应该返回 double 最接近 BigDecimal 是的。注意,对于足够大的数字,最近的 双重的 S.

    我怀疑一个double如何存储一个bigdecimal。

    在大多数情况下是不可能的。如果你把 大十进制 Double 后面: BigDecimal(aBigDecimal.doubleValue) ,结果通常不等于 aBigDecimal .甚至还有一个 isExactDouble 方法进行测试。

    但是对于这个特殊的用途(平方根的初始猜测)并不重要(哦,可能无穷大是这样,但是你可以测试一下)。

        2
  •  0
  •   fusion    6 年前

    转换是有损耗的。如果该值不能表示为double,则结果可能是

      java.lang.Double.POSITIVE_INFINITY
      java.lang.Double.NEGATIVE_INFINITY