Parseint——用 e+ 截断

Parseint – truncating with e+

我在内部使用 parseInt() 来转换我现在想使用 toString() 转换为另一个数字系统的值。

parseInt(value, 10).toString(16) 

但是由于整数由于长度而被截断(即 1.7956279830335669e+47),我无法实现我的数字所需的十六进制表示。

是否有其他方法可以将字符串转换为 int?
我该如何解决这个问题?

使用BigInt:

BigInt(value).toString();

你需要它,因为 Number JavaScript 可以支持的最大是 9007199254740991:

console.log(Number.MAX_SAFE_INTEGER);

您可以使用 BigInt,因为它是一个内置的全局对象,但它不是完全受支持的 ECMAScript 功能 - 目前它处于开发的第 3 阶段。

尝试(适用于支持 BigInt 的 chrome)

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