2011-04-04 9 views
5

Ondalık değeri javascript kullanarak ondalık basamaklara tamamlamanız gerekir.javascript'i kullanarak ondalık kesilmeyi yuvarlama

Ex ,: ..

16.181 to 16.18 
16.184 to 16.18 
16.185 to 16.19 
16.187 to 16.19 

bazı cevaplar bulduk, ancak bunların çoğu 16.19 ile 16.185 yuvarlayın yok

+0

@mplungjan çalışacak umut, benim durumumda acağından (0) ve toFixed (0)". Eğer sorumu okursanız, 16.185 ile 16.19 arasında yuvarlamada sorun yaşadığımı anlayabilirsiniz. – Prasad

+0

Aslında JavaScript'in FF/Chrome'da 16.185 * 100' = '1618.4999999999998' ve IE’de 1618.5’ olduğunu söylediğine şaşıyorum. Çok ilginç. –

+0

Siz haklısınız. Benim hatam - ancak bir şey bir kopyası olmalıdır;) – mplungjan

cevap

13
(Math.round((16.185*Math.pow(10,2)).toFixed(1))/Math.pow(10,2)).toFixed(2); 

değeriniz ise, örneğin 16,199 normal yuvarlak 16.2 dönecektir ... ama bu yöntemle youll olsun Son 0 da, yani 16.20'yi görüyorsun! Ancak, değerin dize olarak döndürüleceğini unutmayın. Eğer daha fazla operasyonlar için kullanmak istiyorsanız, fonksiyon olarak şimdi

:) parseFloat zorunda Ve:

function trueRound(value, digits){ 
    return (Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits); 
} 
+0

Düzenlenmiş kod, gereken şekilde çalışmak için ... – ayk

+0

bu yararlıdır. Fonksiyona benzeyecek şekilde değiştirirseniz, benimkiyle aynı sorunu yaşayan biri için yararlı olabilir. function formatNumber (myNum, numOfDec) { dönüşü (Math.round ((myNum * Math.pow (10, numOfDec)). toFixed (1))/Math.pow (10, numOfDec)) toFixed (numOfDec); } – Prasad

+0

Eklemek için işlev eklendi;) – ayk

0

[DÜZENLE] Bu kod için çalışmaz 18.185 olarak 18.185 gibi bir değer, * Math.pow (10,2) 1818.4999999999997

Math.round(<value> * Math.pow(10,<no_of_decimal_places>))/Math.pow(10,<no_of_decimal_places>) ; 

için değerlendirilmektedir Örnek: 1234,5678 -> 2 ondalık basamak -> 1234,57

Math.round(1234.5678 * Math.pow(10,2))/Math.pow(10,2) ; 
+0

Math.pow yerine 10^ yazdım (10) , ) -> Sabit –

+0

Bu da çalışmıyor. 16.185'i 16.18'de yuvarlar. 16.19 – Prasad

+0

@Prasad: Hmm haklısınız ... garip –

0
function formatNumber(myNum, numOfDec) { 
     var dec = Math.pow(10, numOfDec); 
     return Math.round(myNum * dec + 0.1)/dec; 
} 
+0

Bu çalışmıyor. 16.185'i 16.18'de yuvarlar. Onu 16.19 olarak ayarlamalıyım. – Prasad

+0

Hm .. Anladığım kadarıyla bu konu –

+0

Bu şekilde gidebilir, 5 değerindeki durumları önlemek için bu değere ekstra 0.1 ekleyebilirsin: 'return Math.round (myNum * dec + 0.1)/dec; ' –

0

Eğer yuvarlama için kullandığınız kod doğrudur. Ancak istenen sonucu almak için lütfen .toFixed (numOfDec) kodunu koddan kaldırın.

fonksiyonu:

fonksiyon FormatNumber (myNum, numOfDec) {

var decimal = 1 
    for (i = 1; i <= numOfDec; i++) 
     decimal = decimal * 10 //The value of decimal determines the number of decimals to be rounded off with (.5) up rule 
    var myFormattedNum = Math.round(myNum * decimal)/decimal 
    return (myFormattedNum) 
} 

Ben, bu bir şekilde :)

+0

Ben zaten bunu denedim ve aynı problemi aldım. Onun yuvarlama değil 16.185 16.19 – Prasad

+0

@ Prasad benim çözüm deneyin ne ihtiyacınız olan sonuçlanacaktır! – ayk

0
parseFloat(myNum.toFixed(numOfDec)) 
2

teşekkürler cevap için @ayk size yardımcı olur Umut İşlevi şu şekilde değiştirdi:

function trueRound(value, digits){ 
    return ((Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits)) * 1; 
} 
Eğer yazdığı gibi

sadece 16.216.20 olur ve arkada sıfır gerekmez, çünkü sizinkiyle "* 1" ekleyin.

1

kullanmayın-

Decimal ds=new Decimal(##.##); 
String value=ds.format(inputnumber); 

Bu benim Math.Round" arasındaki farkı soran değilim,% 100