javascript: bir sayının% x'ini hesapla


82

Javascript'te bana bir sayı verildiğinde (10000 diyelim) ve sonra bir yüzde verildiğinde (% 35,8 diyelim) nasıl olacağını merak ediyorum

bunun ne kadar olduğunu nasıl hesaplayabilirim (ör. 3580)


2
Sayıyı% 35,8 ile çarparsınız, bu davar number=10000; alert(number*0.358);
gnarf

Yanıtlar:


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

( Bu işlem sırası değişikliği için teşekkürler jball . Bunu düşünmedim)


3
Orada parantezlere ihtiyacınız yok.
Klaster_1

63
@ Klaster_1 Evet, sadece ilişkiyi daha net göstermeye çalışıyorum. Noktalı virgüllere ya varda boşluklara ihtiyacım olmadığını söyleyebilirsin , ama çok okunabilir ya da iyi bir kod olmaz mıydı? : P
alex

2
İşlem sırasını değiştirmek, kayan nokta sorununu önler, örn.var result = pct / 100 * number;
jball

10000'i neden bölüyoruz? Elbette doğru cevabı veriyor ama anlamsal olarak anlamsız.
Ryan Fox

1
@Ryan Fox Buradaki 10000, yüzdesini (35,8) hesaplamak istediğiniz TOPLAM tutar.
Cagy79

8

Yüzdenizin sayıya göre 100'e bölünmesi (0 ile 1 arasındaki yüzdeyi elde etmek için)

35.8/100*10000

7

Yapacağım şey bu:

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

% 'Yi işlevinizin bir parçası olarak geçirmek istiyorsanız, aşağıdaki alternatifi kullanmalısınız:

<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

En iyisi denge denklemini doğal yoldan ezberlemektir.

Amount / Whole = Percentage / 100

Genellikle bir değişken eksiktir, bu durumda bu Miktar'dır

Amount / 10000 = 35.8 / 100

o zaman lise matematiğine (orantı) her iki taraftan birden çok dış ve her iki taraftan da iç.

Amount * 100 = 358 000

Amount = 3580

Tüm dillerde ve kağıt üzerinde aynı şekilde çalışır. JavaScript bir istisna değildir.


3

Kayan nokta sorunlarını tamamen önlemek için, yüzdesi hesaplanan miktar ve yüzdenin kendisinin tam sayılara dönüştürülmesi gerekir. Bunu şu şekilde çözdüm:

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

Gördüğünüz gibi ben:

  1. Hem amountve hem de ondalık sayıları sayınpercent
  2. Her iki dönüştürme amountve percentüstel gösterimi kullanarak tamsayılar için
  3. Uygun son değeri belirlemek için gereken üstel gösterimi hesaplayın
  4. Son değeri hesaplayın

Üstel gösterimin kullanımı, Jack Moore'un blog gönderisinden esinlenmiştir . Eminim sözdizimim daha kısa olabilirdi, ancak değişken adlarını kullanmam ve her adımı açıklarken olabildiğince açık olmak istedim.



1

Sayısal atama ile biraz bilgiçlik / gereksiz olabilir, ancak burada belirli bir sayının yüzdesini hesaplamak için güvenli bir işlev var:

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

// Usage: getPerc(10000, 25);

0

Zor Yol (öğrenme amacı):

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.