Parseint - усечение с е + - PullRequest
       46

Parseint - усечение с е +

1 голос
/ 13 марта 2019

Я использую parseInt() для преобразования значения, которое теперь хочу преобразовать в другую систему счисления с toString().

parseInt(value, 10).toString(16) 

Но так как целое число усекается (то есть 1.7956279830335669e+47) из-за длины я не могу получить желаемое шестнадцатеричное представление моего числа.

Есть ли другой способ привести строку к int?
Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 13 марта 2019

Использование BigInt:

BigInt(value).toString();

Вам это нужно, потому что самый большой Number JavaScript может поддерживать 9007199254740991:

console.log(Number.MAX_SAFE_INTEGER);

Вы можете использовать BigInt, потому что это встроенный глобальный объект, однако это не полностью поддерживаемая функция ECMAScript - в настоящее время он находится на стадии 3 разработки.

1 голос
/ 13 марта 2019

Try (работает на Chrome, где поддерживается BigInt)

BigInt(Number(value)).toString(16);

однако, используя этот подход, мы теряем точность, но мы можем использовать альтернативный подход путем преобразования числа в экспоненциальной форме в целочисленную форму

let value= "1.7956279830335669e+47";

let sim    = BigInt(Number(value)).toString(16);
let prec   = BigInt(fix2IntStr(value)).toString(16);
let direct = 179562798303356690000000000000000000000000000000n.toString(16);


// convert "exponential" form to integer string
function fix2IntStr(str) { 
  let [m,e] = value.split('e');
  e = e - (m.length - m.indexOf('.')-1);
  m = m.replace('.','');
  return m+"0".repeat(e);
}

console.log('simple :', sim);
console.log('precise:',prec);
console.log('direct :',direct);
...