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


82

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

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


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>

6

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

Amount / Whole = Percentage / 100

Обычно у вас не хватает одной переменной, в данном случае это 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. Рассчитайте конечное значение

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



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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.