Estoy tratando de crear una función para generar un número único cada vez que uso Typescript. La aritmética es a menudo incorrecta por alguna razón. He ampliado la lógica a continuación y sospecho que tiene algo que ver con el tipo de número de Typescript/Javascript o Math.ceil(). Agradecería si alguien pudiera educarme.
function nonce(){ const millidate = (new Date()).getTime(); const factor:number = 10000; const codeTime:number = +millidate*factor; const codeEnd:number = Math.ceil(Math.random()*factor); const codeMult:number = Math.ceil(Math.random()*10); const codeBody:number = codeTime+codeEnd; const code:number = codeBody*codeMult; console.log("Breakdown of " + code + ": ", codeTime, codeEnd, codeBody, codeMult); return code; }; nonce();
Imagen de algunas pruebas en Playground
Estaba usando Playground de Typescript para probar esto, pero su rendimiento parece ser el mismo en diferentes entornos.
Como se señaló en los comentarios, sus números están muy por encima del límite del sistema. Number.MAX_SAFE_INTEGER
en mi sistema de 64 bits:
9007199254740991 <- MSI 163469121917820770 <- your number
Marque hacia abajo, o haga cadenas.
Para trabajar con números grandes (más que Number.MAX_SAFE_INTEGER
), debe usar BigInt()
Sin BigInt:
9007199254740991 + 1 = 9007199254740992 // Right 9007199254740991 + 2 = 9007199254740992 // Wrong 9007199254740991 + 3 = 9007199254740994 // Right
Usando BigInt:
9007199254740991n + 1n = 9007199254740992n //Right 9007199254740991n + 2n = 9007199254740993n //Right 9007199254740991n + 3n = 9007199254740994n //Right