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

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!

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) + '%'

36

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

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


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

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


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


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


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.