web-dev-qa-db-fra.com

javascript: calcule x% d'un nombre

Je me demande comment, en javascript, on me donne un nombre (disons 10000) puis un pourcentage (disons 35,8%)

comment pourrais-je calculer combien c'est (par exemple 3580)

73
Hailwood
var result = (35.8 / 100) * 10000;

(Merci jball pour ce changement d'ordre des opérations. Je ne l'ai pas pris en compte).

148
alex

Votre pourcentage divisé par 100 (pour obtenir le pourcentage entre 0 et 1) par le nombre

35.8/100*10000
9
Timothy Ruhle

Voici ce que je ferais:

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

...
<html goes here>
...

alert(per(10000, 35.8));
7
alcoholtech

J'utilise deux fonctions JS très utiles: http://blog.bassta.bg/2013/05/rangetopercent-and-percenttorange/

function rangeToPercent(number, min, max){
   return ((number - min) / (max - min));
}

et

function percentToRange(percent, min, max) {
   return((max - min) * percent + min);
}

Si vous voulez passer le% dans le cadre de votre fonction, utilisez l’alternative suivante:

<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
ArBR

La meilleure chose à faire est de mémoriser l’équation de la balance de façon naturelle.

Amount / Whole = Percentage / 100

généralement il vous manque une variable, dans ce cas il s'agit du montant

Amount / 10000 = 35.8 / 100

alors vous avez maths au lycée (proportion) à multiple extérieur des deux côtés et intérieur des deux côtés.

Amount * 100 = 358 000

Amount = 3580

Cela fonctionne de la même manière dans toutes les langues et sur le papier. JavaScript ne fait pas exception.

3
eomeroff
var number = 10000;
var result = .358 * number;
2
user1943442

Afin d'éviter complètement les problèmes de virgule flottante, le montant dont le pourcentage est calculé et le pourcentage lui-même doivent être convertis en entiers. Voici comment j'ai résolu ceci:

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

Comme vous pouvez le voir, je:

  1. Compter le nombre de décimales dans amount et dans percent
  2. Convertir amount et percent en entiers à l'aide de la notation exponentielle
  3. Calculer la notation exponentielle nécessaire pour déterminer la valeur finale appropriée
  4. Calculer la valeur finale

L'utilisation de la notation exponentielle a été inspirée par blog de Jack Moore . Je suis sûr que ma syntaxe pourrait être plus courte, mais je voulais être aussi explicite que possible dans mon utilisation des noms de variable et en expliquant chaque étape.

1
Alex Mueller

Harder Way (but d'apprentissage):

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
1
Rubi Jihantoro

C'est peut-être un peu pédant/redondant avec son casting numérique, mais voici une fonction sûre pour calculer le pourcentage d'un nombre donné:

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

// Usage: getPerc(10000, 25);
0
Grant