javascript: обчислити х% від числа


83

Мені цікаво, як у 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

63
@ Klaster_1 Так, просто намагаюся показати стосунки чіткіше. Можна сказати, мені не потрібні ні крапки з комою, ні var, ні пробіли, але це буде не дуже читабельним чи хорошим кодом, чи не так? : P
alex

2
Перемикання порядку операцій дозволяє уникнути проблеми з плаваючою точкою, наприклад,var result = pct / 100 * number;
jball

Чому ділять 10000? Звичайно, це дає правильну відповідь, але це семантично безглуздо.
Ryan Fox

1
@Ryan Fox Значення 10000 тут - ЗАГАЛЬНА сума, для якої потрібно обчислити відсоток (35,8).
Cagy79

8

Ваш відсоток, поділений на 100 (щоб отримати відсоток від 0 до 1), помножений на число

35.8/100*10000

8

Це те, що я б зробив:

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

Важчий шлях (мета навчання):

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.