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)
|| (string.indexOf('e+') !== -1)
|| (string.indexOf('.') !== -1)
){
//return string; //нахой
if(string.indexOf('e+') !== -1){
var exponent = string.split('e+')[1];
var multiplier = string.split('e+')[0];
var divisor = (10n ** eval( (string.split('e')[0].length - (string.indexOf('.') + 1) ).toString()+'n' ) );
var wholePart = ( eval(multiplier.split('.')[0]+'n' ) );
var rest = eval('1'+( ( multiplier.split('.')[1] || '0e' ).split('e')[0])+'n') - divisor;
return ( (wholePart * divisor + rest) * (10n ** eval(exponent+'n')) / divisor );
}
else if(string.indexOf('e-') !== -1){
var divisor = (10n ** eval(string.split('e-')[1]+'n'));
var divisor2 = (10n ** eval( (string.split('e')[0].length - (string.indexOf('.') + 1) ).toString()+'n' ) );
var multiplier = (string.split('e-')[0]);
var wholePart = ( eval(multiplier.split('.')[0]+'n' ) );
var rest = eval('1'+( ( string.split('.')[1] || '0e').split('e')[0] ) +'n') - divisor2;
}else if(string.indexOf('.') !== -1){
var divisor = eval('0n');
var wholePart = ( eval(string.split('.')[0]+'n' ) );
var divisor2 = (10n ** eval( (string.length - (string.indexOf('.') + 1) ).toString()+'n' ) );
var rest = eval( ('1'+string.split('.')[1] || '0')+'n') - divisor2;
}
return [wholePart, divisor, rest];
}
}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',...