我在内部使用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);