Преобразование BigNumber в Int, как в Kotlin

#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);