JavaScript: рассчитать х% от числа - PullRequest
71 голосов
/ 07 декабря 2010

Мне интересно, как в javascript, если мне дали номер (скажем, 10000), а затем получил процент (скажем, 35,8%)

как бы мне узнать, сколько это (например, 3580)

Ответы [ 10 ]

146 голосов
/ 07 декабря 2010
var result = (35.8 / 100) * 10000;

(Спасибо jball за это изменение порядка операций. Я не учел это).

9 голосов
/ 07 декабря 2010

Ваш процент делится на 100 (чтобы получить процент от 0 до 1) раз на число

35.8/100*10000
7 голосов
/ 07 декабря 2010

Вот что я бы сделал:

// 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 голосов
/ 03 июня 2013

Я использую две очень полезные функции JS: http://blog.bassta.bg/2013/05/rangetopercent-and-percenttorange/

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

и

function percentToRange(percent, min, max) {
   return((max - min) * percent + min);
}
6 голосов
/ 07 декабря 2010

Если вы хотите передать% как часть вашей функции, вы должны использовать следующую альтернативу:

<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>
3 голосов
/ 12 июля 2017

Лучше всего запомнить уравнение баланса естественным образом.

Amount / Whole = Percentage / 100

обычно у вас отсутствует одна переменная, в данном случае это сумма

Amount / 10000 = 35.8 / 100

, затем выиметь среднюю школу по математике (пропорции) для нескольких внешних с обеих сторон и внутренних с обеих сторон.

Amount * 100 = 358 000

Amount = 3580

Он работает одинаково на всех языках и на бумаге.JavaScript не является исключением.

2 голосов
/ 03 июня 2013
var number = 10000;
var result = .358 * number;
1 голос
/ 03 мая 2018

Чтобы полностью избежать проблем с плавающей запятой, сумму, процент которой рассчитывается, и сам процент необходимо преобразовать в целые числа. Вот как я решил это:

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. Рассчитать конечное значение

Использование экспоненциальной нотации было вдохновлено сообщением в блоге Джека Мура . Я уверен, что мой синтаксис мог бы быть короче, но я хотел быть максимально явным при использовании имен переменных и объяснении каждого шага.

1 голос
/ 20 февраля 2018

Тяжелый путь (цель обучения):

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
0 голосов
/ 30 мая 2019

Может быть немного педантичным / избыточным с его числовым преобразованием, но вот безопасная функция для вычисления процента от данного числа:

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

// Usage: getPerc(10000, 25);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...