javascript: oblicz x% liczby

82

Zastanawiam się, jak w javascript, gdybym dostał liczbę (powiedzmy 10000), a potem otrzymałem procent (powiedzmy 35,8%)

jak mam obliczyć, ile to jest (np. 3580)

Hailwood
źródło
2
var number=10000; alert(number*0.358);
Pomnożyłbyś

Odpowiedzi:

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

(Dziękuję jball za tę zmianę kolejności operacji. Nie brałem tego pod uwagę).

Alex
źródło
3
Nie potrzebujesz tam nawiasów.
Klaster_1
63
@ Klaster_1 Tak, staram się tylko jaśniej pokazać związek. Można powiedzieć, że nie potrzebuję ani średników var, ani białych spacji, ale nie byłoby to zbyt czytelne lub dobry kod, prawda? : P
alex
2
Zmiana kolejności operacji pozwala uniknąć problemu zmiennoprzecinkowego, np.var result = pct / 100 * number;
jball
Dlaczego dzielisz 10000? Jasne, daje poprawną odpowiedź, ale jest semantycznie bez znaczenia.
Ryan Fox
1
@Ryan Fox 10000 to CAŁKOWITA kwota, dla której chcesz obliczyć procent (35,8).
Cagy79
8

Twój procent podzielony przez 100 (aby uzyskać wartość procentową od 0 do 1) razy przez liczbę

35.8/100*10000
Timothy Ruhle
źródło
7

Oto, co bym zrobił:

// 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
źródło
6

Jeśli chcesz przekazać% jako część swojej funkcji, powinieneś użyć następującej alternatywy:

<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
źródło
6

Najlepiej zapamiętać równanie równowagi w naturalny sposób.

Amount / Whole = Percentage / 100

zwykle brakuje jednej zmiennej, w tym przypadku jest to kwota

Amount / 10000 = 35.8 / 100

wtedy masz matematykę w szkole średniej (proporcje) do wielu zewnętrznych z obu stron i wewnętrznych z obu stron.

Amount * 100 = 358 000

Amount = 3580

Działa tak samo we wszystkich językach i na papierze. JavaScript nie jest wyjątkiem.

eomeroff
źródło
3

Aby w pełni uniknąć problemów z liczbami zmiennoprzecinkowymi, kwotę, której procent jest obliczany, i sam procent należy przekonwertować na liczby całkowite. Oto, jak rozwiązałem ten problem:

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

Jak widać, ja:

  1. Policz liczbę miejsc dziesiętnych zarówno w pliku, jak amountipercent
  2. Konwertuj zarówno amounti percentna liczby całkowite, używając notacji wykładniczej
  3. Oblicz notację wykładniczą potrzebną do określenia właściwej wartości końcowej
  4. Oblicz wartość końcową

Użycie notacji wykładniczej zostało zainspirowane postem na blogu Jacka Moore'a . Jestem pewien, że moja składnia mogłaby być krótsza, ale chciałem być jak najbardziej jednoznaczny w używaniu nazw zmiennych i wyjaśnianiu każdego kroku.

Alex Mueller
źródło
2
var number = 10000;
var result = .358 * number;
user1943442
źródło
1

Może to być nieco pedantyczne / nadmiarowe z rzutowaniem numerycznym, ale oto bezpieczna funkcja do obliczania procentu podanej liczby:

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

// Usage: getPerc(10000, 25);
Dotacja
źródło
0

Harder Way (cel uczenia się):

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
źródło