Javascript: Berechne x% einer Zahl

82

Ich frage mich, wie in Javascript, wenn ich eine Zahl (sagen wir 10000) und dann einen Prozentsatz (sagen wir 35,8%) bekommen habe.

Wie würde ich herausfinden, wie viel das ist (zB 3580)?

Hagelholz
quelle
2
Sie würden die Zahl mit 35,8% multiplizieren, wasvar number=10000; alert(number*0.358);
Gnarf

Antworten:

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

(Danke jball für diese Änderung der Reihenfolge der Operationen. Ich habe es nicht berücksichtigt).

Alex
quelle
3
Sie brauchen dort keine Klammern.
Klaster_1
63
@ Klaster_1 Ja, ich versuche nur, die Beziehung klarer zu zeigen. Man könnte sagen, ich brauche weder Semikolons varnoch Whitspace, aber es wäre nicht sehr lesbar oder guter Code, oder? : P
Alex
2
Durch Ändern der Reihenfolge der Operationen wird das Gleitkommaproblem vermieden, z. B.var result = pct / 100 * number;
jball
Warum teilen die 10000? Sicher, es gibt die richtige Antwort, aber es ist semantisch bedeutungslos.
Ryan Fox
1
@ Ryan Fox Der 10000 hier ist der Gesamtbetrag, für den Sie den Prozentsatz (35,8) berechnen möchten.
Cagy79
9

Ihr Prozentsatz geteilt durch 100 (um den Prozentsatz zwischen 0 und 1 zu erhalten) mal durch die Zahl

35.8/100*10000
Timothy Ruhle
quelle
7

Das würde ich tun:

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

...
<html goes here>
...

alert(per(10000, 35.8));
Alkoholtech
quelle
6

Ich verwende zwei sehr nützliche JS-Funktionen: http://blog.bassta.bg/2013/05/rangetopercent-and-percenttorange/

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

und

function percentToRange(percent, min, max) {
   return((max - min) * percent + min);
}
Chris Panayotoff
quelle
6

Wenn Sie% als Teil Ihrer Funktion übergeben möchten, sollten Sie die folgende Alternative verwenden:

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

Das Beste ist, sich die Gleichgewichtsgleichung auf natürliche Weise zu merken.

Amount / Whole = Percentage / 100

In der Regel fehlt eine Variable. In diesem Fall handelt es sich um Betrag

Amount / 10000 = 35.8 / 100

Dann haben Sie High School Mathe (Verhältnis) zu mehreren äußeren von beiden Seiten und inneren von beiden Seiten.

Amount * 100 = 358 000

Amount = 3580

Es funktioniert in allen Sprachen und auf Papier gleich. JavaScript ist keine Ausnahme.

Eomeroff
quelle
3

Um Gleitkommaprobleme vollständig zu vermeiden, müssen der Betrag, dessen Prozentsatz berechnet wird, und der Prozentsatz selbst in Ganzzahlen umgewandelt werden. So habe ich das gelöst:

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

Wie Sie sehen können, ich:

  1. Zählen Sie die Anzahl der Dezimalstellen sowohl in amountals auch inpercent
  2. Konvertieren Sie beide amountund percentin Ganzzahlen in Exponentialschreibweise
  3. Berechnen Sie die Exponentialschreibweise, die zur Bestimmung des richtigen Endwerts erforderlich ist
  4. Berechnen Sie den Endwert

Die Verwendung der Exponentialnotation wurde von Jack Moores Blogbeitrag inspiriert . Ich bin mir sicher, dass meine Syntax kürzer sein könnte, aber ich wollte so explizit wie möglich mit Variablennamen umgehen und jeden Schritt erklären.

Alex Mueller
quelle
2
var number = 10000;
var result = .358 * number;
user1943442
quelle
1

Es mag mit seiner numerischen Umwandlung etwas pedantisch / redundant sein, aber hier ist eine sichere Funktion, um den Prozentsatz einer bestimmten Zahl zu berechnen:

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

// Usage: getPerc(10000, 25);
Gewähren
quelle
0

Harder Way (Lernzweck):

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