javascript: вычислить x% числа

82

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

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

Hailwood
источник
2
Вы бы умножили это число на 35,8%, то естьvar number=10000; alert(number*0.358);
gnarf

Ответы:

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

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

Алекс
источник
3
Здесь скобки не нужны.
Klaster_1 07
63
@ Klaster_1 Ага, просто пытаюсь показать отношения яснее. Вы могли бы сказать, что мне не нужны ни точки с запятой, ни var, ни пробелы, но это будет не очень удобно для чтения или хороший код, не так ли? : P
Алекс
2
Переключение порядка операций позволяет избежать проблемы с плавающей запятой, например,var result = pct / 100 * number;
jball 07
Зачем делить 10000? Конечно, он дает правильный ответ, но семантически бессмысленно.
Райан Фокс
1
@Ryan Fox. Здесь 10000 - ИТОГОВАЯ сумма, для которой вы хотите рассчитать процент (35,8).
Cagy79
8

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

35.8/100*10000
Тимоти Рул
источник
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>
ArBR
источник
6

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

Amount / Whole = Percentage / 100

Обычно у вас не хватает одной переменной, в данном случае это Amount.

Amount / 10000 = 35.8 / 100

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

Amount * 100 = 358 000

Amount = 3580

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

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

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

Алекс Мюллер
источник
2
var number = 10000;
var result = .358 * number;
user1943442
источник
1

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

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

// Usage: getPerc(10000, 25);
Грант
источник
0

Harder Way (учебная цель):

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
Руби Джиханторо
источник