#javascript #typescript #bignum
#javascript #typescript #bignum #bignumber.js
Вопрос:
У меня есть следующее в Kotlin для преобразования BigInteger
down в обычный integer
val bigIntDiv = bigIntVal?.div(BigInteger.valueOf(429496))
val resultInt = bigIntDiv?.toInt() //This line converts the big Interger down to regular integer
Как я могу добиться такого же преобразования в javascript.
Я использую BigNumber.js
библиотеку https://github.com/MikeMcl/bignumber.js / и я не могу найти способ вернуть обычное целое число из BigNumber
Это то, что у меня сейчас есть с BigNumber.js
библиотекой:
let bigIntVal = new BigNumber("5ACDBB4CC493D909F423D779C2C55E7381DFAE6547DCEFE5712F", 16)
Теперь я хочу вернуть обычное целое число, как показано из эквивалентного кода Kotlin выше?
Такое, что:
let regularInteger = bigIntVal.toInt(); //would be the same value as returned from the Kotlin's end?
Для примера bignumber
5.09632306328228901945340839021510597564609217303391975753746718457743300101444483767019949e
Я пытался использовать BigNumber.js библиотека содержит следующее:
let initial = new BigNumber("5.09632306328228901945340839021510597564609217303391975753746718457743300101444483767019949e",16);
let workingVal = initial.toNumber(); //This gives 5.096323063282289e 70, which is not what I want
Когда я писал аналогичный код в kotlin, kotlin дал мне то, что я хочу
val resultInt = initial?.toInt() //Kotlin gave me -1879845894 which is great to work with.
Итак, как я могу добиться того же с BigNumber.js
библиотекой
Спасибо.
Комментарии:
1. Я думаю, что вы ищете
.toNumber()
, что означает в вашем случаеbigIntVal.toNumber()
, см. mikemcl.github.io/bignumber.js/#toN для получения дополнительной информации2. Мне трудно понять вашу проблему, откуда взялось значение
"5ACDBB4CC493D909F423D779C2C55E7381DFAE6547DCEFE5712F"
?3. Мне непонятно, к какому поведению вы стремитесь. Во-первых, Kotlin BigInteger предназначен только для целых чисел, но JS BigNumber более сопоставим с Kotlin BigDecimal. Почему бы не использовать встроенный в JS тип BigInt ? Во-вторых, Kotlin toInt() просто возвращает 32 бита младшего порядка как целое число со знаком с двумя дополнениями. Это то поведение, которое вы хотите.
Ответ №1:
Вот краткий пример преобразования BigNumber в примитивный int:
let bigIntVal = new BigNumber("5ACDBB4CC493D909F423D779C2C55E7381DFAE6547DCEFE5712F", 16)
let bigIntValToInt = bigIntVal.toNumber()
// double check
console.log(typeof bigIntVal);
console.log(typeof bigIntValToInt);