Я немного смущен, используя значение double
.Использование путаницы с двойным значением, когда groovy решает сделать значение в double vs BigDecimal?
Когда я, как показано ниже: -
double foo = 20.46455
assert 20 == foo.round()
assert 20.46 == foo.round(2)
Это работает отлично. но когда я что-то вроде как: -
def foo = 20.46455
assert 20 == foo.round()
он бросает: -
java.lang.NullPointerException
и
def foo = 20.46455
assert 20.46 == foo.round(2)
он бросает: -
groovy.lang.MissingMethodException: Нет сигнатуры метода: java.math.BigDecimal.round() применим для типов аргументов: (java.lang.Integer) значения: [2] Возможные решения: round (java.math .MathContext), найти(), пау (INT), мощность (java.lang.Integer), найти (groovy.lang.Closure) и (java.lang.Number)
Это означает, что по умолчанию в groovy
, стоимость сохранения в BigDecimal
и BigDecimal.round()
ожидаем java.math.MathContext
как ввод.
Но моя путаница начинается, когда я использую Math.round()
, который кроме double
в качестве входных данных, то почему ниже заявления является получение передается в то время как заводной сохранить по умолчанию в BigDecimal
?
def foo = 20.46455
assert 20 == Math.round(foo)
И почему я должен использовать .toDouble()
пройти мой тест, в то время как foo
имеет значение в формате double
как ниже?
def foo = 20.46455
assert 20 == foo.toDouble().round()
assert 20.46 == foo.toDouble().round(2)
Примечание: - Я не хочу знать, как round
двойное значение, я просто хочу знать, почему groovy
ведет себя по-разному в каждом случае ??
@yash Я не хочу округлять число. Я просто хочу знать, почему 'groovy' ведет себя по-разному в каждом случае. Спасибо .. :) –
@NathanHughes На самом деле я знаю, как обойти 'BigDecimal' или' Double'..И да, вы правы, мой вопрос: 'когда groovy решает сделать что-то двойное против BigDecimal?' –
У меня также есть название вопроса, спасибо .. :) –