Machen Sie eine Zahl zu einem Prozentsatz

104

Was ist der beste Weg, um die "0" XXX% von einer Zahl zu entfernen und sie zu einem Prozentsatz zu machen? Was passiert, wenn die Nummer ein Int ist?

var number1 = 4.954848;
var number2 = 5.9797;

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

Antworten:

199

Ein Prozentsatz ist nur:

(number_one / number_two) * 100

Keine Notwendigkeit für etwas Besonderes:

var number1 = 4.954848;
var number2 = 5.9797;

alert(Math.floor((number1 / number2) * 100)); //w00t!
Naftali alias Neal
quelle
47
um die pct-Dezimalstelle beizubehalten: var pct = (num * 100) .toFixed (1) + "%";
Efwjames
5
alert (~~ ((Nummer1 / Nummer2) * 100)); da der Math.floor langsamer ist als ~~ :)
Nyxz
1
Warum Math.floor? Und nicht Math.round? Auch in Ihrem Beispiel 4.954848 / 5.9797ist näher an 83%als an 82%Ihren Code-Ausgaben.
Gaazkam
9
@nyxz Ugg-- Sie schreiben Code für Menschen, nicht für Maschinen. Es sei denn, Sie befinden sich in einer sehr engen kritischen Schleife, ~~ist viel weniger lesbar alsMath.floor
Jeremy J Starcher
5
Kein Grund, den ich kenne. 83% aller Prozentsätze sind sowieso
erfunden
58
((portion/total) * 100).toFixed(2) + '%'
xtrem
quelle
35

Die beste Lösung, wo enist das englische Gebietsschema:

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

Liron Shapira
quelle
1
Vorsicht vor Support oder nicht auf Smartphones .... Derzeit ist der Support nicht so ideal.
Jdehaan
(9.23) .toLocaleString ("en", {style: "Prozent"}) gibt "923%" zurück. Gibt es eine Möglichkeit, dies zu lösen?
Slorenzo
2
@ Slorenzo 9,23 ist in der Tat 923%. Angenommen, Sie möchten 9,23%, müssen Sie 9,23 durch 100 teilen und dann die Konvertierung versuchen.
Steve Hawkins
2
@slorenzo Um auch die Dezimalstellen zu erhalten, können Sie versuchen, etwas wie fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })Siehe stackoverflow.com/a/29773435/411428
Manfred
16

Wenn Sie eine solche Zahl haben 0.123456, die das Ergebnis einer Division ist, um einen Prozentsatz zu erhalten, multiplizieren Sie sie mit 100 und runden Sie sie dann entweder ab oder verwenden Sie sie toFixedwie in Ihrem Beispiel.

Math.round(0.123456 * 100) //12

Hier ist ein jQuery-Plugin, um das zu tun:

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

Verwendung:

alert($.percentage(6, 10));
Alex Turpin
quelle
15
Wo ist jQuery.roundund jQuery.divideundjQuery.multiply
Raynos
2
@ Xeon06 hmmm das OP scheint seine Meinung geändert zu haben. seltsam. Meine Antwort enthielt nicht genug jQuery.
Naftali aka Neal
2
@ Raynos Ich hatte mit einer Multiplikation mit einer Schleife und einer Runde mit String-Manipulation begonnen, aber ich gab die Division auf.
Alex Turpin
2

Numeral.js ist eine von mir erstellte Bibliothek, die Zahlen, Währungen und Prozentsätze formatieren kann und die Lokalisierung unterstützt.

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

Adamwdraper
quelle
1
Das letzte Commit für numeral.jswar der 27. März 2017. Entweder ist die Bibliothek perfekt (keine Mängel) oder sie wird nicht mehr aktiv gepflegt. Ab dem 28. Januar 2019 hat das Projekt 135 offene Ausgaben, wobei die älteste aus dem November 2012 stammt. Die Anzahl der offenen Ausgaben ohne Verpflichtung in fast zwei Jahren lässt darauf schließen, dass das Projekt nicht mehr betreut wird. Freut mich, anders überzeugt zu sein.
Manfred
1

var Prozent = Math.floor (100 * Nummer1 / Nummer2 - 100) + '%';

Tomas Kubes
quelle
1

Die meisten Antworten schlagen vor, am Ende '%' anzuhängen. Ich würde lieber Intl.NumberFormat()mit{ 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
quelle
0

Die Antwort von @ xtrem ist gut, aber ich denke, die toFixedund die makePercentagesind allgemein gebräuchlich. Definieren Sie zwei Funktionen, die wir überall verwenden können.

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
quelle
2
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
31.