Складіть число у відсотках


104

Який найкращий спосіб зняти "0" XXX% з числа і зробити його відсотком? Що станеться, якщо число стане інтом?

var number1 = 4.954848;
var number2 = 5.9797;

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

Відповіді:


199

Відсоток - це просто:

(number_one / number_two) * 100

Не потрібно нічого фантазії:

var number1 = 4.954848;
var number2 = 5.9797;

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

47
зберегти pct десятковим: var pct = (число * 100) .toFixed (1) + "%";
efwjames

5
оповіщення (~~ ((число1 / число2) * 100)); так як Math.floor повільніше, ніж ~~ :)
nyxz

1
Чому Math.floor? А ні Math.round? Навіть у вашому прикладі 4.954848 / 5.9797ближче , 83%ніж 82%Ваш код виходу.
гаазкам

9
@nyxz Ugg-- ви пишете код для людей, а не для машин. Якщо ви не знаходитесь в якомусь надмірно критичному циклі, ~~він набагато менш читабельний, ніжMath.floor
Джеремі Дж. Старчер,

5
Ніякої причини, про яку я знаю. 83% усіх відсотків складаються так чи інакше
Нафталі ака Ніл


36

Найкраще рішення, де enзнаходиться англійська мова:

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


1
Слідкуйте за підтримкою чи не на смартфонах .... Наразі підтримка не є такою ідеальною.
jdehaan

(9.23) .toLocaleString ("en", {style: "відсоток"}) повертає "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
Manfred

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 hmmm ОП, здається, передумав. дивно. моя відповідь НЕ вистачало JQuery в ньому.
Naftali aka Neal

2
@Raynos Я почав з множення, використовуючи цикл і раунд, використовуючи стрижневі маніпуляції, але я відмовився від поділу.
Олексій Турпін

2

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

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


1
Останнє зобов’язання numeral.jsбуло 27 березня 2017 року. Або бібліотека ідеальна (немає дефектів), або вона більше не підтримується активно. Станом на 28 січня 2019 року проект має 135 відкритих випусків, найстаріший з них - з листопада 2012 року. Кількість відкритих питань без зобов'язань протягом майже 2 років свідчить про те, що проект більше не доглядають. Радий переконатися в іншому.
Манфред


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


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
Хоча цей фрагмент коду може вирішити питання, зокрема пояснення дійсно допомагає покращити якість вашої публікації. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
31пій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.