Rendi un numero una percentuale


104

Qual è il modo migliore per togliere lo "0" XXX% da un numero e renderlo una percentuale? Cosa succede se il numero è un int?

var number1 = 4.954848;
var number2 = 5.9797;

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

Risposte:


199

Una percentuale è solo:

(number_one / number_two) * 100

Non c'è bisogno di niente di speciale:

var number1 = 4.954848;
var number2 = 5.9797;

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

47
per mantenere il decimale pct: var pct = (num * 100) .toFixed (1) + "%";
efwjames

5
avviso (~~ ((numero1 / numero2) * 100)); poiché il Math.floor è più lento di ~~ :)
nyxz

1
Perché Math.floor? E no Math.round? Anche nel tuo esempio 4.954848 / 5.9797è più vicino a 83%che ai 82%tuoi output di codice.
gaazkam

9
@nyxz Ugg - scrivi codice per gli esseri umani, non per le macchine. A meno che tu non sia in un ciclo critico super stretto, ~~è molto meno leggibile diMath.floor
Jeremy J Starcher

5
Nessuna ragione che io sappia. L'83% di tutte le percentuali sono comunque costituite
Naftali aka Neal

58
((portion/total) * 100).toFixed(2) + '%'

36

La soluzione migliore, dov'è enla lingua inglese:

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


1
Attenzione al supporto o meno su smartphone .... Attualmente il supporto non è l'ideale.
jdehaan

(9.23) .toLocaleString ("en", {style: "percent"}) restituisce "923%", c'è un modo per risolverlo?
slorenzo

2
@slorenzo 9.23 è infatti 923%. Supponendo che tu voglia il 9,23%, dovresti dividere 9,23 per 100 e quindi provare la conversione.
Steve Hawkins

3
@slorenzo Per ottenere anche le cifre decimali potresti provare qualcosa di simile fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })Vedi stackoverflow.com/a/29773435/411428
Manfred

16

Bene, se hai un numero come 0.123456questo è il risultato di una divisione per dare una percentuale, moltiplicalo per 100 e poi arrotondalo o usa toFixedcome nel tuo esempio.

Math.round(0.123456 * 100) //12

Ecco un plugin jQuery per farlo:

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

Uso:

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

15
Dov'è jQuery.rounde jQuery.divideejQuery.multiply
Raynos

2
@ Xeon06 hmmm l'OP sembra aver cambiato idea. strano. la mia risposta non conteneva abbastanza jQuery.
Naftali aka Neal

2
@ Raynos avevo iniziato a moltiplicare usando un loop e un round usando la manipolazione delle stringhe, ma ho rinunciato alla divisione.
Alex Turpin

2

Numeral.js è una libreria che ho creato in grado di formattare numeri, valute, percentuali e ha il supporto per la localizzazione.

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


1
L'ultimo commit per è numeral.jsstato il 27 marzo 2017. O la libreria è perfetta (nessun difetto) o non è più mantenuta attivamente. Al 28 gennaio 2019 il progetto ha 135 problemi aperti, il più vecchio risale a novembre 2012. Il numero di problemi aperti senza impegno in quasi 2 anni suggerisce che il progetto non è più curato. Felice di essere convinto del contrario.
Manfred


1

La maggior parte delle risposte suggerisce di aggiungere "%" alla fine. Preferirei Intl.NumberFormat()con{ 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

La risposta di @ xtrem è buona, ma penso che toFixede makePercentagesiano di uso comune. Definisci due funzioni e possiamo usarle ovunque.

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
Sebbene questo snippet di codice possa risolvere la domanda, includere una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
31piy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.