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) + "%");
});

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!

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


35

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

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


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));

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%"


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

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);


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%​​​​​

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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.