Faça um número, uma porcentagem

104

Qual é a melhor maneira de retirar o "0". XXX% de um número e torná-lo uma porcentagem? O que acontecerá se o número for um int?

var number1 = 4.954848;
var number2 = 5.9797;

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

Respostas:

199

Uma porcentagem é apenas:

(number_one / number_two) * 100

Não há necessidade de nada sofisticado:

var number1 = 4.954848;
var number2 = 5.9797;

alert(Math.floor((number1 / number2) * 100)); //w00t!
Naftali também conhecido como Neal
fonte
47
para manter o decimal pct: var pct = (num * 100) .toFixed (1) + "%";
efwjames
5
alert (~~ ((número1 / número2) * 100)); como o Math.floor é mais lento que ~~ :)
nyxz
1
Porque Math.floor? E não Math.round? Até mesmo em seu exemplo 4.954848 / 5.9797está mais próximo do 83%que em 82%suas saídas de código.
gaazkam
9
@nyxz Ugg-- você escreve código para humanos, não máquinas. A menos que você esteja em um ciclo crítico ~~muito restrito, é muito menos legível do queMath.floor
Jeremy J Starcher
5
Nenhuma razão que eu conheça. 83% de todas as porcentagens são compostas de qualquer maneira
Naftali, também conhecido como Neal
58
((portion/total) * 100).toFixed(2) + '%'
xtrem
fonte
36

A melhor solução, onde enestá a localidade em inglês:

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

Liron Shapira
fonte
1
Cuidado com suporte ou não em smartphones .... Atualmente o suporte não é o ideal.
jdehaan
(9.23) .toLocaleString ("en", {style: "percent"}) retorna "923%", existe uma maneira de resolver isso?
slorenzo
2
@slorenzo 9.23 é de fato 923%. Supondo que você queira 9,23%, você precisaria dividir 9,23 por 100 e então tentar a conversão.
Steve Hawkins
3
@slorenzo Para obter também os dígitos decimais, você pode tentar algo como fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })Veja stackoverflow.com/a/29773435/411428
Manfred
16

Bem, se você tem um número como 0.123456esse é o resultado de uma divisão para dar uma porcentagem, multiplique-o por 100 e depois arredonde ou use toFixedcomo no seu exemplo.

Math.round(0.123456 * 100) //12

Aqui está um plugin jQuery para fazer isso:

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

Uso:

alert($.percentage(6, 10));
Alex Turpin
fonte
15
Onde está jQuery.rounde jQuery.divideejQuery.multiply
Raynos
2
@ Xeon06 hmmm o OP parece ter mudado de ideia. esquisito. minha resposta não continha jQuery suficiente.
Naftali também conhecido como Neal
2
@Raynos Eu comecei a multiplicar usando um loop e uma rodada usando manipulação de cordas, mas desisti da divisão.
Alex Turpin
2

Numeral.js é uma biblioteca que criei que pode formatar números, moedas, porcentagens e tem suporte para localização.

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

adamwdraper
fonte
1
O último commit para numeral.jsfoi 27 de março de 2017. Ou a biblioteca é perfeita (sem defeitos) ou não é mais mantida ativamente. Em 28 de janeiro de 2019, o projeto tinha 135 questões em aberto, sendo a mais antiga de novembro de 2012. O número de questões em aberto sem compromisso em quase 2 anos sugere que o projeto não é mais mantido. Feliz por ser convencido do contrário.
Manfred
1

var percent = Math.floor (100 * número1 / número2 - 100) + '%';

Tomas Kubes
fonte
1

A maioria das respostas sugere acrescentar '%' no final. Eu prefiro Intl.NumberFormat()com{ 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
fonte
0

A resposta de @xtrem é boa, mas acho que toFixede makePercentagesão de uso comum. Defina duas funções e podemos usar isso em qualquer lugar.

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
fonte
2
Embora este snippet de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade de sua postagem. Lembre-se de que você está respondendo à pergunta para leitores no futuro e essas pessoas podem não saber os motivos de sua sugestão de código.
31 de