Мне интересно, как в javascript, если мне дали номер (скажем, 10000), а затем получил процент (скажем, 35,8%)
как бы я выяснил, сколько это (например, 3580)
Мне интересно, как в javascript, если мне дали номер (скажем, 10000), а затем получил процент (скажем, 35,8%)
как бы я выяснил, сколько это (например, 3580)
var result = (35.8 / 100) * 10000;
(Спасибо jball за это изменение порядка операций. Я не рассматривал его).
Ваш процент делится на 100 (чтобы получить процент от 0 до 1) раза на число
35.8/100*10000
Это то, что я сделал бы:
// num is your number
// amount is your percentage
function per(num, amount){
return num*amount/100;
}
...
<html goes here>
...
alert(per(10000, 35.8));
Если вы хотите передать% как часть своей функции, вы должны использовать следующую альтернативу:
<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>
Я использую две очень полезные функции 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);
}
var number = 10000;
var result = .358 * number;
Лучше всего запомнить уравнение баланса естественным образом.
Amount / Whole = Percentage / 100
обычно у вас отсутствует одна переменная, в данном случае это Amount
Amount / 10000 = 35.8 / 100
тогда у вас есть математика средней школы (пропорция) к множественному внешнему с обеих сторон и внутреннему с обеих сторон.
Amount * 100 = 358 000
Amount = 3580
Он работает одинаково на всех языках и на бумаге. JavaScript не является исключением.
Сложный путь (цель обучения):
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
Чтобы полностью избежать проблем с плавающей запятой, сумму, процент которой рассчитывается, и сам процент необходимо преобразовать в целые числа. Вот как я решил это:
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
Как видите, я:
amount
и в percent
amount
и percent
в целые числа с помощью экспоненциальной записиИспользование экспоненциальной нотации было вдохновлено сообщением в блоге Джека Мура. Я уверен, что мой синтаксис может быть короче, но я хотел быть как можно более явным при использовании имен переменных и объяснении каждого шага.