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