JSFiddle - React, Tailwind, and code Playground
JavaScript
function bigint(string){
string = string.toString() || '0';
if(
(string.indexOf('.') === -1)
&& (string.indexOf('e') === -1)
&& Number(string) <= Number.MAX_SAFE_INTEGER
){
return Number(string);
}
else if(
(string.indexOf('e') !== -1)
|| (string.indexOf('.') !== -1) //(1e-3).toString() = "0.001"
){
if(string.indexOf('e+') !== -1){
return ( eval(string.split('e+')[0]+'n' ) * (10n ** eval(string.split('e+')[1]+'n')) );
}
else if(
(string.indexOf('e-') !== -1)
|| (string.indexOf('.') !== -1)
){
return string;
}
}else{
return eval(string+'n');
}
}
console.log(1, bigint(1).toString());
console.log(Number.MAX_SAFE_INTEGER, bigint(Number.MAX_SAFE_INTEGER).toString()); //9007199254740991
console.log(9007199254740992, bigint(9007199254740992).toString());
console.log('fail here', 9007199254740993, bigint(9007199254740993).toString()); //input -> 9007199254740992
console.log('9007199254740993', bigint('9007199254740993').toString());
console.log('10000000000000000000000000000000000000000', bigint('10000000000000000000000000000000000000000').toString());
console.log(1e+40, bigint(1e+40).toString());
console.log('1e+40', bigint('1e+40').toString());
console.log(1e-5, bigint(1e-5).toString());
console.log('1e-5', bigint('1e-5').toString());
console.log(1e-40, bigint(1e-40).toString());
console.log('1e-40', bigint('1e-40').toString());
console.log('123456789123456789123456789123456789123456789123456789123456789', bigint('123456789123456789123456789123456789123456789123456789123456789').toString());
console.log('0.000000000000000000000000000000000001', bigint('0.000000000000000000000000000000000001').toString());
console.log('0.12345678912345679123456791234567912345679', bigint('0.12345678912345679123456791234567912345679').toString());