Проблема с двойным типом данных в Scala - PullRequest
1 голос
/ 18 июня 2019

Впервые в Scala, и я пытаюсь найти библиотеку в Scala, чтобы проверить, имеет ли передаваемое двойное значение определенную точность и масштаб.Я заметил, что если передаваемое значение равно 1.00001, то я получаю это значение в вызываемой функции, но если передаваемое значение равно 0,00001, я получаю значение как 1,0E-5. Есть ли способ сохранитьномер в Scala?

def checkPrecisionAndScaleFormat(precision: Int, scale: Int)(valueToCheck: Double): Boolean = {
  val value = BigDecimal(valueToCheck)
  value.precision <= precision && value.scale <= scale
}

1 Ответ

3 голосов
/ 18 июня 2019

Что я заметил, так это то, что если передаваемое значение равно 1,00001, то я получаю значение, соответствующее значению в вызываемой функции, но если передаваемое значение равно 0,00001, то значение равно 1,0E-5

.

По вашей фразе кажется, что вы видите 1.00001 и 1.0E-5 при отладке (либо при печати, либо в отладчике). Важно понимать, что

  1. это не соответствует никаким внутренним различиям, просто как Double.toString определено в Java .

  2. когда вы делаете что-то вроде val x = 1.00001, значение не точно 1.00001, а самое близкое число, представляемое как Double: 1.000010000000000065512040237081237137317657470703125. Самый простой способ узнать точное значение - это посмотреть BigDecimal.exact(valueToCheck).

Единственный способ сохранить номер - не работать с Double для начала. Если он передан в виде строки, создайте BigDecimal из строки . Если это результат некоторых вычислений в виде двойного числа, рассмотрите возможность выполнения их вместо BigDecimal s. Но строковое представление Double просто не несет нужной вам информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...