javascript: calcula el x% de un número


82

Me pregunto cómo en javascript si me dieron un número (digamos 10000) y luego me dieron un porcentaje (digamos 35,8%)

¿Cómo calcularía cuánto es eso (por ejemplo, 3580)


2
Multiplicaría el número por 35,8%, que esvar number=10000; alert(number*0.358);
gnarf

Respuestas:


168
var result = (35.8 / 100) * 10000;

(Gracias jball por este cambio de orden de operaciones. No lo consideré).


3
No necesita soportes allí.
Klaster_1

63
@ Klaster_1 Sí, solo trato de mostrar la relación más clara. Se podría decir que tampoco necesito punto y coma var, ni espacios en blanco, pero no sería muy legible o no sería un buen código, ¿verdad? : P
alex

2
Cambiar el orden de las operaciones evita el problema del punto flotante, por ejemplo,var result = pct / 100 * number;
jball

¿Por qué se dividen los 10000? Claro, da la respuesta correcta, pero semánticamente no tiene sentido.
Ryan Fox

1
@Ryan Fox El 10000 aquí es la cantidad TOTAL para la que desea calcular el porcentaje (35.8).
Cagy79

9

Su porcentaje dividido por 100 (para obtener el porcentaje entre 0 y 1) veces por el número

35.8/100*10000

7

Esto es lo que haría:

// num is your number
// amount is your percentage
function per(num, amount){
  return num*amount/100;
}

...
<html goes here>
...

alert(per(10000, 35.8));


6

Si desea pasar el% como parte de su función, debe usar la siguiente alternativa:

<script>
function fpercentStr(quantity, percentString)
{
    var percent = new Number(percentString.replace("%", ""));
    return fpercent(quantity, percent);
}

function fpercent(quantity, percent)
{
    return quantity * percent / 100;
}
document.write("test 1:  " + fpercent(10000, 35.873))
document.write("test 2:  " + fpercentStr(10000, "35.873%"))
</script>

6

Lo mejor es memorizar la ecuación del equilibrio de forma natural.

Amount / Whole = Percentage / 100

Por lo general, le falta una variable, en este caso es Cantidad

Amount / 10000 = 35.8 / 100

luego tienes matemáticas de la escuela secundaria (proporción) a múltiples externos de ambos lados e internos de ambos lados.

Amount * 100 = 358 000

Amount = 3580

Funciona igual en todos los idiomas y en papel. JavaScript no es una excepción.


3

Para evitar por completo los problemas de punto flotante, la cantidad cuyo porcentaje se está calculando y el porcentaje en sí deben convertirse a números enteros. Así es como resolví esto:

function calculatePercent(amount, percent) {
    const amountDecimals = getNumberOfDecimals(amount);
    const percentDecimals = getNumberOfDecimals(percent);
    const amountAsInteger = Math.round(amount + `e${amountDecimals}`);
    const percentAsInteger = Math.round(percent + `e${percentDecimals}`);
    const precisionCorrection = `e-${amountDecimals + percentDecimals + 2}`;    // add 2 to scale by an additional 100 since the percentage supplied is 100x the actual multiple (e.g. 35.8% is passed as 35.8, but as a proper multiple is 0.358)

    return Number((amountAsInteger * percentAsInteger) + precisionCorrection);
}

function getNumberOfDecimals(number) {
    const decimals = parseFloat(number).toString().split('.')[1];

    if (decimals) {
        return decimals.length;
    }

    return 0;
}

calculatePercent(20.05, 10); // 2.005

Como puede ver, yo:

  1. Cuente el número de decimales tanto en el amountcomo en elpercent
  2. Convierta ambos amounty percenta números enteros usando notación exponencial
  3. Calcule la notación exponencial necesaria para determinar el valor final adecuado
  4. Calcular el valor final

El uso de la notación exponencial se inspiró en la publicación del blog de Jack Moore . Estoy seguro de que mi sintaxis podría ser más corta, pero quería ser lo más explícito posible en el uso de los nombres de las variables y en la explicación de cada paso.



1

Puede ser un poco pedante / redundante con su conversión numérica, pero aquí hay una función segura para calcular el porcentaje de un número dado:

function getPerc(num, percent) {
    return Number(num) - ((Number(percent) / 100) * Number(num));
}

// Usage: getPerc(10000, 25);

0

Harder Way (propósito de aprendizaje):

var number = 150
var percent= 10
var result = 0
for (var index = 0; index < number; index++) {
   const calculate = index / number * 100
   if (calculate == percent) result += index
}
return result
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.