Parseint - 用e +截断

问题描述 投票:1回答:2

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

parseInt(value, 10).toString(16) 

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

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

javascript ecmascript-6 numbers hex parseint
2个回答
2
投票

使用BigInt

BigInt(value).toString();

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

console.log(Number.MAX_SAFE_INTEGER);

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


1
投票

尝试(适用于支持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);
© www.soinside.com 2019 - 2024. All rights reserved.