Bir sayıyı yüzde yapın


105

Bir sayıdaki "0" ı% XXX indirimden çıkarmanın ve bunu yüzde yapmanın en iyi yolu nedir? Sayı bir int olursa ne olur?

var number1 = 4.954848;
var number2 = 5.9797;

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

Yanıtlar:


201

Bir yüzde sadece:

(number_one / number_two) * 100

Süslü hiçbir şeye gerek yok:

var number1 = 4.954848;
var number2 = 5.9797;

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

47
pct ondalık tutmak için: var pct = (num * 100) .toFixed (1) + "%";
efwjames

5
uyarı (~~ ((sayı1 / sayı2) * 100));
Math.floor

1
Neden Math.floor? Ve değil Math.roundmi? Örneğinizde bile , kod çıktılarınızdan daha 4.954848 / 5.9797yakındır . 83%82%
gaazkam

9
@nyxz Ugg-- makineler için değil, insanlar için kod yazarsınız. Çok sıkı bir kritik döngüde olmadığınız sürece, ~~bundan çok daha az okunabilirMath.floor
Jeremy J Starcher

5
Bildiğim bir sebep yok. Tüm yüzdelerin% 83'ü zaten oluşuyor
Naftali aka Neal


36

En iyi çözüm, enİngilizce yerel ayar nerede :

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


1
Akıllı telefonlarda destek olup olmadığına dikkat edin .... Şu anda destek o kadar ideal değil.
jdehaan

(9.23) .toLocaleString ("en", {style: "percent"}) "% 923" değerini döndürüyor, bunu çözmenin bir yolu var mı?
slorenzo

2
@slorenzo 9.23 aslında% 923'tür. % 9.23 istediğinizi varsayarsak, 9.23'ü 100'e bölmeniz ve ardından dönüşümü denemeniz gerekir.
Steve Hawkins

3
@slorenzo Ondalık basamakları da elde etmek için fraction.toLocaleString("en", { style: "percent", minimumFractionDigits: 2 })bkz. stackoverflow.com/a/29773435/411428
Manfred

16

0.123456Yüzde vermek için bir bölmenin sonucu böyle bir sayı varsa , onu 100 ile çarpın ve sonra yuvarlayın veya toFixedörneğinizdeki gibi kullanın .

Math.round(0.123456 * 100) //12

İşte bunu yapmak için bir jQuery eklentisi:

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

Kullanım:

alert($.percentage(6, 10));

15
Nerede jQuery.roundve jQuery.dividevejQuery.multiply
Raynos

2
@ Xeon06 hmmm OP fikrini değiştirmiş gibi görünüyor. tuhaf. cevabım yoktu bunun yeterli jQuery var.
Naftali aka Neal

2
@Raynos Bir döngü kullanarak bir çarpmaya ve dize manipülasyonunu kullanarak bir tura başlamıştım ama bölmeden vazgeçtim.
Alex Turpin

2

Numeral.js , sayıları, para birimlerini, yüzdeleri biçimlendirebilen ve yerelleştirme desteği olan oluşturduğum bir kitaplık.

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


1
Son taahhüt numeral.js27 Mart 2017 idi. Ya kütüphane mükemmel (kusur yok) ya da artık aktif olarak tutulmuyor. 28 Ocak 2019 itibariyle, projenin en eskisi Kasım 2012'den itibaren 135 açık sorunu var. Neredeyse 2 yıldır taahhüt edilmeyen açık sorunların sayısı, projenin artık ilgilenilmediğini gösteriyor. Aksi halde ikna olmaktan mutluyum.
Manfred


1

Çoğu cevap, sonuna '%' eklemeyi önerir. Doğrusu tercih ediyorum Intl.NumberFormat()ile{ 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'in cevabı güzel, ancak bence toFixedve makePercentagekullanımı yaygın. İki işlevi tanımlayın ve bunu her yerde kullanabiliriz.

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
Bu kod parçacığı soruyu çözebilirken, bir açıklama eklemek, yayınınızın kalitesini artırmaya gerçekten yardımcı olur. Gelecekte okuyucular için soruyu yanıtladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceklerini unutmayın.
31piy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.