Niech liczba będzie procentem

104

Jaki jest najlepszy sposób, aby usunąć „0” XXX% z liczby i zmienić ją w procent? Co się stanie, jeśli liczba będzie int?

var number1 = 4.954848;
var number2 = 5.9797;

$(document).ready(function() {    
    final = number1/number2;
    alert(final.toFixed(2) + "%");
});
user1040259
źródło

Odpowiedzi:

200

Procent to po prostu:

(number_one / number_two) * 100

Nie ma potrzeby niczego wymyślnego:

var number1 = 4.954848;
var number2 = 5.9797;

alert(Math.floor((number1 / number2) * 100)); //w00t!
Naftali alias Neal
źródło
47
aby zachować dziesiętne pct: var pct = (num * 100) .toFixed (1) + "%";
efwjames
5
alert (~~ ((liczba1 / liczba2) * 100)); ponieważ Math.floor jest wolniejszy niż ~~ :)
nyxz,
1
Dlaczego Math.floor? A nie Math.round? Nawet w twoim przykładzie 4.954848 / 5.9797jest bliżej 83%niż do 82%twoich wyników kodu.
gaazkam
9
@nyxz Ugg - piszesz kod dla ludzi, a nie maszyn. O ile nie jesteś w jakiejś super ciasnej pętli krytycznej, ~~jest znacznie mniej czytelny niżMath.floor
Jeremy J Starcher
5
Nie ma powodu, o którym wiem. 83% wszystkich procentów to i tak
Naftali aka Neal
58
((portion/total) * 100).toFixed(2) + '%'
xtrem
źródło
36

Najlepsze rozwiązanie, gdzie enjest angielski język:

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

Liron Shapira
źródło
1
Uważaj na wsparcie lub nie na smartfonach… Obecnie wsparcie nie jest tak idealne.
jdehaan
(9.23) .toLocaleString ("en", {style: "percent"}) zwraca "923%", czy istnieje sposób na rozwiązanie tego problemu?
slorenzo
2
@slorenzo 9.23 to w rzeczywistości 923%. Zakładając, że chcesz 9,23%, musisz podzielić 9,23 przez 100, a następnie spróbować konwersji.
Steve Hawkins,
3
@slorenzo Aby uzyskać również cyfry dziesiętne, możesz spróbować czegoś takiego: fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })Zobacz stackoverflow.com/a/29773435/411428
Manfred
16

Cóż, jeśli masz taką liczbę, 0.123456która jest wynikiem dzielenia wartości procentowej, pomnóż ją przez 100, a następnie zaokrąglij ją lub użyj toFixedjak w przykładzie.

Math.round(0.123456 * 100) //12

Oto wtyczka jQuery, która to robi:

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

Stosowanie:

alert($.percentage(6, 10));
Alex Turpin
źródło
15
Gdzie jest jQuery.roundi jQuery.divideijQuery.multiply
Raynos
2
@ Xeon06 hmmm wydaje się, że OP zmienił zdanie. dziwne. moja odpowiedź nie zawierała wystarczającej ilości jQuery.
Naftali aka Neal
2
@Raynos Zacząłem od mnożenia, używając pętli i rundy, używając manipulacji na łańcuchach, ale zrezygnowałem z dzielenia.
Alex Turpin,
2

Numeral.js to biblioteka, którą stworzyłem, która może formatować liczby, waluty, procenty i obsługuje lokalizację.

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

adamwdraper
źródło
1
Ostatnie zatwierdzenie numeral.jsmiało miejsce 27 marca 2017 r. Albo biblioteka jest doskonała (bez błędów), albo nie jest już aktywnie utrzymywana. Na dzień 28 stycznia 2019 r. W projekcie było 135 otwartych problemów, z których najstarszy pochodzi z listopada 2012 r. Liczba otwartych problemów bez zobowiązań w ciągu prawie 2 lat sugeruje, że projekt nie jest już obsługiwany. Cieszę się, że przekonałem się inaczej.
Manfred
1

var percent = Math.floor (100 * number1 / number2 - 100) + '%';

Tomas Kubes
źródło
1

Większość odpowiedzi sugeruje dodanie „%” na końcu. Wolałbym raczej Intl.NumberFormat()z{ 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);

StangSpree
źródło
0

Odpowiedź @ xtrem jest dobra, ale myślę, że toFixedi makePercentagesą powszechne. Zdefiniuj dwie funkcje, z których możemy korzystać wszędzie.

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%​​​​​
Scott Ming
źródło
2
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
lipca