javascript: tính x% của một số


82

Tôi đang tự hỏi làm thế nào trong javascript nếu tôi được cung cấp một số (giả sử 10000) và sau đó được cung cấp một phần trăm (giả sử 35,8%)

làm thế nào tôi sẽ tính ra đó là bao nhiêu (ví dụ: 3580)


2
Bạn sẽ nhân con số với 35,8%, nghĩa làvar number=10000; alert(number*0.358);
gnarf

Câu trả lời:


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

(Cảm ơn jball vì sự thay đổi thứ tự hoạt động này. Tôi đã không cân nhắc).


3
Bạn không cần dấu ngoặc ở đó.
Klaster_1

63
@ Klaster_1 Vâng, tôi chỉ đang cố gắng thể hiện mối quan hệ rõ ràng hơn. Bạn có thể nói rằng tôi không cần dấu chấm phẩy, hoặc var, hoặc dấu cách, nhưng nó sẽ không dễ đọc hoặc mã tốt phải không? : P
alex

2
Việc chuyển đổi thứ tự các thao tác sẽ tránh được vấn đề về dấu chấm động, ví dụ:var result = pct / 100 * number;
jball

Tại sao lại chia 10000? Chắc chắn, nó đưa ra câu trả lời chính xác, nhưng nó vô nghĩa về mặt ngữ nghĩa.
Ryan Fox,

1
@Ryan Fox 10000 ở đây là TỔNG số tiền bạn muốn tính phần trăm (35,8).
Cagy79

9

Phần trăm của bạn chia cho 100 (để nhận phần trăm từ 0 đến 1) nhân với số

35.8/100*10000

7

Đây là những gì tôi sẽ làm:

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

Nếu bạn muốn chuyển% như một phần của hàm, bạn nên sử dụng phương án thay thế sau:

<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

Điều tốt nhất là ghi nhớ phương trình cân bằng theo cách tự nhiên.

Amount / Whole = Percentage / 100

thường Bạn thiếu một biến, trong trường hợp này là Số tiền

Amount / 10000 = 35.8 / 100

thì bạn có toán học trung học (tỷ lệ) với nhiều bên ngoài từ cả hai bên và bên trong từ cả hai bên.

Amount * 100 = 358 000

Amount = 3580

Nó hoạt động giống nhau trong tất cả các ngôn ngữ và trên giấy. JavaScript cũng không ngoại lệ.


3

Để tránh hoàn toàn các vấn đề về dấu phẩy động, số tiền mà phần trăm của nó đang được tính toán và phần trăm của chính nó cần phải được chuyển đổi thành số nguyên. Đây là cách tôi giải quyết vấn đề này:

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

Như bạn thấy, tôi:

  1. Đếm số số thập phân trong cả dấu amountpercent
  2. Chuyển đổi cả hai amountpercentthành số nguyên bằng cách sử dụng ký hiệu mũ
  3. Tính toán ký hiệu hàm mũ cần thiết để xác định giá trị cuối thích hợp
  4. Tính giá trị cuối cùng

Việc sử dụng ký hiệu hàm mũ được lấy cảm hứng từ bài đăng trên blog của Jack Moore . Tôi chắc rằng cú pháp của tôi có thể ngắn hơn, nhưng tôi muốn càng rõ ràng càng tốt trong việc sử dụng tên biến và giải thích từng bước.



1

Nó có thể hơi phức tạp / dư thừa với việc ép kiểu số, nhưng đây là một hàm an toàn để tính toán tỷ lệ phần trăm của một số nhất định:

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

// Usage: getPerc(10000, 25);

0

Cách khó hơn (mục đích học tập):

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.