Actualmente estoy tratando de escribir una parte de mi código que toma un número grande, digamos, 1e31, y lo convierte a 1no donde no es una medida de unidades. Actualmente tengo mi código configurado como tal:
function getShortened(number) { if (number <= 0) return number; var num = Math.pow(10, Math.floor(Math.log10(number)) % 3) * (number / Math.pow(10, Math.floor(Math.log10(number)))); return num; } function getNotation(num) { let firstArray = ["", "un", "du", "tr", "qa", "qi", "sx", "sp", "oc", "no"]; let secondArray = ["", "Du", "Tr", "Qa", "Qi", "Sx", "Sp", "Oc", "No"]; let output = ""; console.log((Math.floor(Math.log10(num) / 3)) + " " + (Math.floor(Math.log10(num) / 3) % 11 - 1) + " " + (Math.floor(Math.floor(Math.log10(num) / 3) / 11))); output += firstArray[Math.floor(Math.log10(num) / 3) % 11 - 1]; output += secondArray[Math.floor(Math.floor(Math.log10(num) / 3) / 11)]; return output; } console.log(Math.round(getShortened(1e33)) + getNotation(1e33)); // should show 1Du console.log(Math.round(getShortened(1e36)) + getNotation(1e36)); // should show 1unDu console.log(Math.round(getShortened(1e30)) + getNotation(1e30)); // should show 1noEl problema con el que me encuentro es que el índice que uso para firstArray funciona bien hasta que llega a 9, luego salta a -1. Si alguien pudiera darme algo de ayuda, sería muy apreciado. Avísame si necesitas más del código.
Así que terminé resolviéndolo. El código original tomó un número grande y esencialmente determinó cuántos dígitos había en el número, luego lo dividiría por 3 para determinar el índice de una matriz a la que se haría referencia para el valor. Cuando intenté transferir eso de una matriz grande a dos matrices más pequeñas que eran más dinámicas y, en teoría, permitirían números más grandes que el límite en javascript (aunque ese es otro problema). Para hacer esto, necesitaría cambiar el índice de inicio a uno que recorra las dos matrices. El problema con el que me encontré fue que hay casos especiales para los índices 0-4, y el segmento de repetición de 10 números comenzó en el índice 11. Esencialmente, aunque tuve en cuenta el cambio de índice 1, lo hice después de ajustar el índice original y al hacerlo, trató de asignar índices que están fuera de la matriz. Para arreglar esto, fue sorprendentemente simple, solo tomo en cuenta el cambio primero y luego el ajuste funciona perfectamente.
function getNotation(num){ let firstArray = ["", "un", "du", "tr", "qa", "qi", "sx", "sp", "oc", "no"]; let secondArray = ["", "De", "Tr", "Qa", "Qi", "Sx", "Sp", "Oc", "No"]; let output = ""; console.log((Math.floor(Math.log10(num) / 3)) + " " + (Math.floor(Math.log10(num) / 3) % 11 - 1) + " " + (Math.floor(Math.floor(Math.log10(num) / 3) / 11))); output += firstArray[(Math.floor(Math.log10(num) / 3) - 1) % 10]; output += secondArray[Math.floor(Math.floor(Math.log10(num) / 3) / 9)]; return output; }