javascript:数値のx%を計算する


82

javascriptで、数値(たとえば、10000)が与えられ、次にパーセンテージ(たとえば、35.8%)が与えられた場合、どうすればよいのでしょうか。

それがいくらであるかをどのように計算しますか(例:3580)


2
数値に35.8%を掛けます。つまり、var number=10000; alert(number*0.358);
gnarf 2010

回答:


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

(この操作の順序の変更についてjballに感謝します。私はそれを考慮しませんでした)。


3
角かっこは必要ありません。
klaster_1 2010

63
@ Klaster_1ええ、関係をより明確に見せようとしているだけです。セミコロンvar、、、またはホイットスペースは必要ないと言うことができますが、それはあまり読みにくいか、優れたコードではないでしょうか?:P
アレックス2010

2
操作の順序を切り替えると、浮動小数点の問題が回避されます。たとえば、var result = pct / 100 * number;
jball

なぜ10000を分割するのですか?確かに、それは正しい答えを与えますが、それは意味的に無意味です。
ライアンフォックス

1
@Ryan Foxここでの10000は、パーセンテージ(35.8)を計算する合計金額です。
cagy79 2015


7

これは私がすることです:

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

関数の一部として%を渡したい場合は、次の代替手段を使用する必要があります。

<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

最良のことは、自然な方法でバランス方程式を覚えることです。

Amount / Whole = Percentage / 100

通常、1つの変数が欠落しています。この場合、それはAmountです。

Amount / 10000 = 35.8 / 100

次に、高校の数学(比例)が、両側から外側に、両側から内側に複数あります。

Amount * 100 = 358 000

Amount = 3580

すべての言語と紙で同じように機能します。JavaScriptも例外ではありません。


3

浮動小数点の問題を完全に回避するには、パーセントが計算されている量とパーセント自体を整数に変換する必要があります。これが私がこれを解決した方法です:

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

ご覧のとおり、私は:

  1. amountとの両方の小数点以下の桁数を数えますpercent
  2. 指数表記を使用してamountとの両方percentを整数に変換します
  3. 適切な終了値を決定するために必要な指数表記を計算します
  4. 最終値を計算する

指数表記の使用法は、JackMooreのブログ投稿に触発されました。構文はもっと短くなる可能性があると思いますが、変数名の使用法と各ステップの説明をできるだけ明確にしたいと思いました。



1

数値のキャストでは少し衒学的/冗長かもしれませんが、特定の数値のパーセンテージを計算するための安全な関数は次のとおりです。

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

// Usage: getPerc(10000, 25);

0

より難しい方法(学習目的):

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.