Así que tengo algunos números x = 320232 y = 2301 z = 12020305 . Quiero redondear estos números usando JavaScript para que se conviertan en x = 320000 y = 2300 z = 12000000 .
Math.round y Math.floor pero resulta que solo funcionan con valores decimales como a = 3.1; Math.round(a); // Outputs 3 y no a números enteros.
Entonces, mi pregunta es si podemos redondear números enteros usando JavaScript y, en caso afirmativo, ¿cómo?
Editar: lo quiero en la ronda de los lugares iniciales de 3 dígitos como se ve en las variables anteriores. Como si hubiera otra variable llamada c = 423841 Debería redondearse para convertirse en c = 424000 .
Podrías trabajar con el logaritmo de diez y ajustar los dígitos.
const format = n => v => { if (!v) return 0; const l = Math.floor(Math.log10(Math.abs(v))) - n + 1; return Math.round(v / 10 ** l) * 10 ** l; }; console.log([0, -9876, 320232, 2301, 12020305, 123456789].map(format(3)));La solución es primero calcular cuántos números deben redondearse y luego usarlos en una ronda.
Math.round(1234/100)*100 redondearía a 1200 para que podamos usar esto para redondear. Entonces solo necesitamos determinar con qué reemplazar 100 en este ejemplo.
O sea que sería un 1 seguido de LENGTH - 3 ceros. Ese número se puede calcular como es 10 a la potencia de LENGTH - 3 , en JS: 10 ** (length - 3) .
var x = 320232; var y = 2301; var z = 12020305; function my_round(number){ var org_number = number; // calculate integer number var count = 0; if (number >= 1) ++count; while (number / 10 >= 1) { number /= 10; ++count; } // length - 3 count = Math.round(count) - 3; if (count < 0){ count = 0; } // 10 to the power of (length - 3) var helper = 10 ** count; return Math.round(org_number/helper)*helper; } alert(my_round(x)); alert(my_round(y)); alert(my_round(z));No es el código más bonito, aunque traté de hacerlo un código explicable.
Esto debería funcionar:
function roundToNthPlace(input, n) { let powerOfTen = 10 ** n return Math.round(input/powerOfTen) * powerOfTen; } console.log([320232, 2301,12020305, 423841].map(input => roundToNthPlace(input, 3))); Output: [320000, 2000, 12020000, 424000]