Đặt một con số thành một tỷ lệ phần trăm


104

Cách tốt nhất để giảm giá "0." XXX% cho một con số và biến nó thành phần trăm? Điều gì xảy ra nếu số đó là một số nguyên?

var number1 = 4.954848;
var number2 = 5.9797;

$(document).ready(function() {    
    final = number1/number2;
    alert(final.toFixed(2) + "%");
});

Câu trả lời:


199

Một tỷ lệ phần trăm chỉ là:

(number_one / number_two) * 100

Không cần bất cứ thứ gì cầu kỳ:

var number1 = 4.954848;
var number2 = 5.9797;

alert(Math.floor((number1 / number2) * 100)); //w00t!

47
để giữ số thập phân pct: var pct = (num * 100) .toFixed (1) + "%";
efwjames

5
alert (~~ ((number1 / number2) * 100)); vì Math.floor chậm hơn ~~ :)
nyxz

1
Tại sao Math.floor? Và không Math.round? Ngay cả trong ví dụ của bạn 4.954848 / 5.9797cũng gần 83%hơn với 82%đầu ra mã của bạn.
gaazkam

9
@nyxz Ugg-- bạn viết mã cho con người, không phải máy móc. Trừ khi bạn đang ở trong một số vòng lặp chỉ trích siêu chặt chẽ, ~~ít nhiều có thể đọc được hơnMath.floor
Jeremy J Starcher

5
Không có lý do gì mà tôi biết. 83% của tất cả các tỷ lệ được thực hiện lên anyway
Naftali aka Neal


36

Giải pháp tốt nhất, enngôn ngữ tiếng Anh ở đâu:

fraction.toLocaleString("en", {style: "percent"})


1
Hãy coi chừng có hỗ trợ hay không trên điện thoại thông minh .... Hiện tại hỗ trợ không phải là lý tưởng.
jdehaan

(9.23) .toLocaleString ("en", {style: "Finland"}) trả về "923%", có cách nào để giải quyết nó không?
slorenzo

2
@slorenzo 9.23 thực chất là 923%. Giả sử bạn muốn 9,23%, bạn cần chia 9,23 cho 100 và sau đó thử chuyển đổi.
Steve Hawkins

3
@slorenzo Để nhận các chữ số thập phân, bạn có thể thử một cái gì đó như fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })Xem stackoverflow.com/a/29773435/411428
Manfred

16

Chà, nếu bạn có một số như 0.123456vậy là kết quả của phép chia để cho phần trăm, hãy nhân nó với 100 rồi làm tròn hoặc sử dụng toFixednhư trong ví dụ của bạn.

Math.round(0.123456 * 100) //12

Đây là một plugin jQuery để làm điều đó:

jQuery.extend({
    percentage: function(a, b) {
        return Math.round((a / b) * 100);
    }
});

Sử dụng:

alert($.percentage(6, 10));

15
Ở đâu jQuery.roundjQuery.dividejQuery.multiply
Raynos

2
@ Xeon06 hmmm OP dường như đã chuyển ý. kỳ dị. câu trả lời của tôi không có đủ jQuery trong đó.
Naftali aka Neal

2
@Raynos Tôi đã bắt đầu với phép nhân bằng cách sử dụng một vòng lặp và một vòng bằng cách sử dụng thao tác chuỗi nhưng tôi đã từ bỏ phép chia.
Alex Turpin

2

Numeral.js là một thư viện mà tôi đã tạo có thể định dạng số, tiền tệ, tỷ lệ phần trăm và có hỗ trợ bản địa hóa.

numeral(0.7523).format('0%') // returns string "75%"


1
Lần cam kết cuối cùng numeral.jslà ngày 27 tháng 3 năm 2017. Thư viện hoàn hảo (không có khuyết tật) hoặc không còn được bảo trì tích cực. Tính đến ngày 28 tháng 1 năm 2019, dự án có 135 vấn đề còn mở với vấn đề cũ nhất là từ tháng 11 năm 2012. Số lượng các vấn đề còn mở không có cam kết trong gần 2 năm cho thấy rằng dự án không còn được quan tâm. Hạnh phúc khi được thuyết phục khác.
Manfred


1

Hầu hết các câu trả lời đề xuất thêm '%' vào cuối. Tôi thích Intl.NumberFormat()với{ style: 'percent'}

var num = 25;

var option = {
  style: 'percent'

};
var formatter = new Intl.NumberFormat("en-US", option);
var percentFormat = formatter.format(num / 100);
console.log(percentFormat);


0

Câu trả lời của @ xtrem là tốt, nhưng tôi nghĩ rằng các toFixedvà cách makePercentagesử dụng phổ biến. Xác định hai chức năng và chúng ta có thể sử dụng chức năng đó ở mọi nơi.

const R = require('ramda')
const RA = require('ramda-adjunct')

const fix = R.invoker(1, 'toFixed')(2)

const makePercentage = R.when(
  RA.isNotNil,
  R.compose(R.flip(R.concat)('%'), fix, R.multiply(100)),
)

let a = 0.9988
let b = null

makePercentage(b) // -> null
makePercentage(a) // -> ​​​​​99.88%​​​​​

2
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
31piy
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.