Convertir un número en porcentaje

104

¿Cuál es la mejor manera de quitar el "0". XXX% de un número y convertirlo en un porcentaje? ¿Qué sucede si el número resulta ser un int?

var number1 = 4.954848;
var number2 = 5.9797;

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

Respuestas:

199

Un porcentaje es solo:

(number_one / number_two) * 100

No hay necesidad de nada elegante:

var number1 = 4.954848;
var number2 = 5.9797;

alert(Math.floor((number1 / number2) * 100)); //w00t!
Naftali alias Neal
fuente
47
para mantener el pct decimal: var pct = (num * 100) .toFixed (1) + "%";
efwjames
5
alerta (~~ ((número1 / número2) * 100)); ya que Math.floor es más lento que ~~ :)
nyxz
1
¿Por qué Math.floor? Y no Math.round? Incluso en su ejemplo 4.954848 / 5.9797está más cerca 83%que a 82%sus salidas de código.
gaazkam
9
@nyxz Ugg: escribe código para humanos, no para máquinas. A menos que esté en un ciclo crítico súper estrecho, ~~es mucho menos legible queMath.floor
Jeremy J Starcher
5
No hay ninguna razón que yo sepa. El 83% de todos los porcentajes se componen de todos modos
Naftali alias Neal
58
((portion/total) * 100).toFixed(2) + '%'
xtrem
fuente
36

La mejor solución, donde enestá la configuración regional en inglés:

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

Liron Shapira
fuente
1
Tenga cuidado con el soporte o no en los teléfonos inteligentes .... Actualmente, el soporte no es tan ideal.
jdehaan
(9.23) .toLocaleString ("en", {style: "percent"}) devuelve "923%", ¿hay alguna forma de resolverlo?
slorenzo
2
@slorenzo 9.23 es de hecho el 923%. Suponiendo que quiere 9.23%, necesitaría dividir 9.23 entre 100 y luego intentar la conversión.
Steve Hawkins
3
@slorenzo Para obtener los dígitos decimales también, puede probar algo como fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })Ver stackoverflow.com/a/29773435/411428
Manfred
16

Bueno, si tienes un número como 0.123456ese es el resultado de una división para dar un porcentaje, multiplícalo por 100 y luego redondea o usa toFixedcomo en tu ejemplo.

Math.round(0.123456 * 100) //12

Aquí hay un complemento de jQuery para hacer eso:

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

Uso:

alert($.percentage(6, 10));
Alex Turpin
fuente
15
Dónde está jQuery.roundy jQuery.divideyjQuery.multiply
Raynos
2
@ Xeon06 hmmm, el OP parece haber cambiado de opinión. extraño. mi respuesta no tenía suficiente jQuery.
Naftali alias Neal
2
@Raynos Había comenzado a multiplicar usando un bucle y una ronda usando la manipulación de cuerdas, pero renuncié a la división.
Alex Turpin
2

Numeral.js es una biblioteca que creé que puede formatear números, moneda, porcentajes y tiene soporte para la localización.

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

Adamwdraper
fuente
1
La última confirmación numeral.jsfue el 27 de marzo de 2017. O la biblioteca es perfecta (sin defectos) o ya no se mantiene activamente. Al 28 de enero de 2019, el proyecto tiene 135 problemas abiertos, siendo el más antiguo de noviembre de 2012. El número de problemas abiertos sin compromiso en casi 2 años sugiere que el proyecto ya no está siendo atendido. Feliz de estar convencido de lo contrario.
Manfred
1

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

Tomas Kubes
fuente
1

La mayoría de las respuestas sugieren agregar '%' al final. Preferiría 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);

StangSpree
fuente
0

La respuesta de @ xtrem es buena, pero creo que toFixedy makePercentageson de uso común. Defina dos funciones, y podemos usarlas en todas partes.

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
fuente
2
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo a la pregunta para los lectores en el futuro, y es posible que esas personas no conozcan los motivos de su sugerencia de código.
31piy