Есть ли элегантные способы конвертировать Int в BigDecimal в Kotlin? - PullRequest
0 голосов
/ 18 октября 2019

Я работаю над своим игрушечным проектом с Kotlin.

При написании кода я чувствую, что эти коды несколько дублированы и не чистые.

val a: Int = 1
val a_D: BigDecimal = a.toBigDecimal()
val b_D: BigDecimal = a.toBigDecimal()

Итак, есть лиспособ избежать этого дублирования (что-то вроде toBigDecimal ()), используя элегантный способ?

1 Ответ

1 голос
/ 18 октября 2019

Если вам надоело создавать BigDecimal в две строки, BigDecimal имеет конструкторы, которые принимают Int, которые вы можете вызвать напрямую:

 val bigDecimalInt = BigDecimal(1)

Это хорошо для целочисленных значений, НО для значений с плавающей точкой, таких как Double конструктор и toBigDecimal на самом деле ведут себя по-разному. Конструктор создает значение BigDecimal передаваемого значения Double, которое будет «неправильным», если это значение не может быть точно представлено в арифметике с плавающей точкой. toBigDecimal преобразует значение в строку и затем использует то, что дает "правильное" значение.

val doubleNum:Double = 0.1
println(doubleNum.toBigDecimal()) // prints 0.1

val bigDecimal:BigDecimal = BigDecimal(0.1)
println(bigDecimal)               // prints 0.1000000000000000055511151231257827021181583404541015625

Если ничего из этого не имеет смысла, вам, вероятно, нужно прочитать об арифметике с плавающей запятой, это обычное явление. проблема, затрагивающая все / большинство языков программирования

Так что toBigDecimal более безопасный вариант

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