Сделайте число процентным

105

Как лучше всего убрать "0" XXX% с числа и сделать его процентным? Что произойдет, если число окажется целым?

var number1 = 4.954848;
var number2 = 5.9797;

$(document).ready(function() {    
    final = number1/number2;
    alert(final.toFixed(2) + "%");
});
user1040259
источник

Ответы:

201

Процент - это просто:

(number_one / number_two) * 100

Не нужно ничего особенного:

var number1 = 4.954848;
var number2 = 5.9797;

alert(Math.floor((number1 / number2) * 100)); //w00t!
Нафтали он же Нил
источник
47
для сохранения десятичного числа pct: var pct = (num * 100) .toFixed (1) + "%";
efwjames 09
5
оповещение (~~ ((число1 / число2) * 100)); так как Math.floor медленнее, чем ~~ :)
nyxz 07
1
Почему Math.floor? А нет Math.round? Даже в вашем примере 4.954848 / 5.9797ближе , 83%чем 82%Ваш код выхода.
gaazkam
9
@nyxz Ugg - вы пишете код для людей, а не для машин. Если вы не находитесь в каком-то сверхжестком критическом цикле, ~~он гораздо менее Math.floor
читабелен,
5
Нет причин, о которых я знаю. 83% всех процентов все равно составляют
Нафтали, он же Нил
36

Лучшее решение, где enанглийская локаль:

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

Лирон Шапира
источник
1
Остерегайтесь поддержки на смартфонах или нет .... В настоящее время поддержка не так уж идеальна.
jdehaan
(9.23) .toLocaleString ("en", {style: "percent"}) возвращает "923%", есть ли способ решить эту проблему?
slorenzo
2
@slorenzo 9.23 на самом деле составляет 923%. Предполагая, что вы хотите 9,23%, вам нужно будет разделить 9,23 на 100, а затем попробовать преобразование.
Стив Хокинс
3
@slorenzo Чтобы получить десятичные цифры, вы можете попробовать что-то вроде fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })См. stackoverflow.com/a/29773435/411428
Манфред
16

Что ж, если у вас есть такое число, 0.123456которое является результатом деления для получения процента, умножьте его на 100, а затем либо округлите, либо используйте toFixedкак в вашем примере.

Math.round(0.123456 * 100) //12

Вот плагин jQuery для этого:

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

Использование:

alert($.percentage(6, 10));
Алекс Терпин
источник
15
Где есть jQuery.roundи jQuery.divideиjQuery.multiply
Raynos
2
@ Xeon06 хммм, ОП, кажется, передумал. странно. в моем ответе не хватало jQuery.
Нафтали, он же Нил,
2
@Raynos Я начал с умножения, используя цикл, и раунд, используя манипуляции со строками, но я отказался от деления.
Alex Turpin
2

Numeral.js - это созданная мной библиотека, которая может форматировать числа, валюту, проценты и поддерживает локализацию.

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

adamwdraper
источник
1
Последняя фиксация numeral.jsпроизошла 27 марта 2017 года. Либо библиотека идеальна (без дефектов), либо она больше не поддерживается. По состоянию на 28 января 2019 года у проекта 135 открытых проблем, самая старая из которых датируется ноябрем 2012 года. Количество открытых проблем без фиксации за почти 2 года предполагает, что за проектом больше не следят. Рад убедиться в обратном.
Манфред
1

вар процент = Math.floor (100 * число1 / число2 - 100) + '%';

Томаш Кубес
источник
1

В большинстве ответов предлагается добавить в конце «%». Я бы предпочел Intl.NumberFormat()с{ 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
источник
0

Ответ @xtrem хорош, но я думаю, что toFixedи makePercentageони широко используются. Определите две функции, и мы можем использовать их везде.

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
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода.
31piy