Что на самом деле является функцией doubleValue в классе BigDecimal в Scala - PullRequest
0 голосов
/ 06 июля 2018

Класс BigDecimal в scala содержит функцию doubleValue. Двойной размер равен 64 битам ... Но BigDecimal может содержать любое количество цифр и любое количество цифр после десятичной точки.

Я попытался в scala REPL увидеть, что он возвращает.

На самом деле полезно при написании программы найти квадратный корень BigDecimal, чтобы обеспечить начальное предположение о квадратном корне. Я сомневаюсь, что двойник может хранить BigDecimal. Кто-нибудь может уточнить это?

scala> BigDecimal("192837489983938382617887338478272884822843716738884788278828947828784888.1993883727818837818811881818818"
)
res6: scala.math.BigDecimal = 192837489983938382617887338478272884822843716738884788278828947828784888.199388372781883781881
1881818818

scala> res6.doubleValue()
res7: Double = 1.928374899839384E71

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Это эквивалентно Java методу с тем же именем , который задокументирован как:

Преобразует этот BigDecimal в двойной. Это преобразование аналогично сужающему примитивному преобразованию из двойного в плавающее, как определено в Спецификации языка Java ™: если этот BigDecimal имеет слишком большую величину, представленную как двойное, он будет преобразован в Double.NEGATIVE_INFINITY или Double.POSITIVE_INFINITY, в зависимости от ситуации. Обратите внимание, что даже когда возвращаемое значение конечно, это преобразование может потерять информацию о точности значения BigDecimal.

Кажется, на самом деле это не говорит об этом, но он должен вернуть double, ближайший к BigDecimal. Обратите внимание, что для достаточно больших чисел существуют большие промежутки между ближайшими double с.

Я сомневаюсь, что двойник может хранить BigDecimal.

В большинстве случаев не может. Если вы конвертируете BigDecimal в Double и обратно: BigDecimal(aBigDecimal.doubleValue), результат обычно не будет равен aBigDecimal. Есть даже isExactDouble метод для проверки.

Но для этого конкретного использования (первоначальное предположение о квадратном корне) это не имеет значения (OTOH, возможна бесконечность, но вы можете просто проверить это).

0 голосов
/ 06 июля 2018

Конверсия с потерями. Если значение не может быть представлено как двойное, то результатом может быть одно из

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