Faire un nombre un pourcentage

104

Quelle est la meilleure façon de supprimer le «0». XXX% de réduction sur un nombre et d'en faire un pourcentage? Que se passe-t-il si le nombre est un entier?

var number1 = 4.954848;
var number2 = 5.9797;

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

Réponses:

199

Un pourcentage est juste:

(number_one / number_two) * 100

Pas besoin de quelque chose d'extraordinaire:

var number1 = 4.954848;
var number2 = 5.9797;

alert(Math.floor((number1 / number2) * 100)); //w00t!
Naftali alias Neal
la source
47
pour garder le pct décimal: var pct = (num * 100) .toFixed (1) + "%";
efwjames
5
alert (~~ ((nombre1 / nombre2) * 100)); car le Math.floor est plus lent que ~~ :)
nyxz
1
Pourquoi Math.floor? Et non Math.round? Même dans votre exemple, il 4.954848 / 5.9797est plus proche 83%que de 82%vos sorties de code.
gaazkam
9
@nyxz Ugg - vous écrivez du code pour les humains, pas pour les machines. À moins que vous ne soyez dans une boucle critique extrêmement serrée, ~~c'est beaucoup moins lisible queMath.floor
Jeremy J Starcher
5
Aucune raison que je connaisse. 83% de tous les pourcentages sont constitués de toute façon
Naftali aka Neal
58
((portion/total) * 100).toFixed(2) + '%'
xtrem
la source
36

La meilleure solution, où se entrouve la langue anglaise:

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

Liron Shapira
la source
1
Attention au support ou pas sur les smartphones .... Actuellement le support n'est pas si idéal.
jdehaan
(9.23) .toLocaleString ("fr", {style: "percent"}) renvoie "923%", y a-t-il un moyen de le résoudre?
slorenzo
2
@slorenzo 9.23 est en fait 923%. En supposant que vous vouliez 9,23%, vous devrez diviser 9,23 par 100, puis essayer la conversion.
Steve Hawkins
3
@slorenzo Pour obtenir également les chiffres décimaux, vous pouvez essayer quelque chose comme fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })Voir stackoverflow.com/a/29773435/411428
Manfred
16

Eh bien, si vous avez un nombre comme 0.123456celui-ci est le résultat d'une division pour donner un pourcentage, multipliez-le par 100, puis arrondissez-le ou utilisez toFixedcomme dans votre exemple.

Math.round(0.123456 * 100) //12

Voici un plugin jQuery pour faire cela:

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

Usage:

alert($.percentage(6, 10));
Alex Turpin
la source
15
Où est jQuery.roundet jQuery.divideetjQuery.multiply
Raynos
2
@ Xeon06 hmmm l'OP semble avoir changé d'avis. bizarre. ma réponse ne contenait pas assez de jQuery.
Naftali aka Neal
2
@Raynos J'avais commencé sur une multiplication en utilisant une boucle et une ronde en utilisant la manipulation de cordes mais j'ai abandonné la division.
Alex Turpin
2

Numeral.js est une bibliothèque que j'ai créée qui peut formater des nombres, des devises, des pourcentages et prend en charge la localisation.

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

adamwdraper
la source
1
Le dernier commit numeral.jsétait le 27 mars 2017. Soit la bibliothèque est parfaite (aucun défaut), soit elle n'est plus activement maintenue. Au 28 janvier 2019, le projet avait 135 problèmes en suspens, le plus ancien datant de novembre 2012. Le nombre de problèmes en suspens sans engagement depuis près de 2 ans suggère que le projet n'est plus pris en charge. Heureux d'être convaincu du contraire.
Manfred
1

var pour cent = Math.floor (100 * nombre1 / nombre2 - 100) + '%';

Tomas Kubes
la source
1

La plupart des réponses suggèrent d'ajouter «%» à la fin. Je préférerais Intl.NumberFormat()avec{ 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
la source
0

La réponse de @ xtrem est bonne, mais je pense que le toFixedet le makePercentagesont d'usage courant. Définissez deux fonctions, et nous pouvons l'utiliser partout.

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
la source
2
Bien que cet extrait de code puisse résoudre la question, inclure une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
31piy