JavaScript dize değişkenini ondalık / para birimine dönüştür


114

Bir JavaScript dize değişkenini ondalık sayıya nasıl dönüştürebiliriz?

Aşağıdaki gibi bir işlev var mı:

parseInt(document.getElementById(amtid4).innerHTML)

Yanıtlar:


240

Evet - parseFloat.

parseFloat(document.getElementById(amtid4).innerHTML);

Numaraları biçimlendirmek için şunu kullanın toFixed:

var num = parseFloat(document.getElementById(amtid4).innerHTML).toFixed(2);

num artık iki ondalık basamakla biçimlendirilmiş sayıya sahip bir dizedir.


1
Bu değişkeni 120.50 gibi 2 ondalık basamakla yapabilir miyiz? şu anda yalnızca 120.5 alıyorum.
Varada

16
@PhilipWhitehouse'dan alıntı yapmak için "Lütfen, bunu okuyan herkese, para birimini saklamak için float kullanmayın. Hassasiyet ve verileri kaybedeceksiniz. Bunu tamsayı sent (veya kuruş vb.) Olarak depolamalı ve daha önce dönüştürmelisiniz ÇIKTI.". Kaynak: stackoverflow.com/questions/149055/…
SSH Bu

@SSHThis Bildiğim kadarıyla JavaScript tamsayı tipine sahip değil. Yalnızca dahili olarak 64 bit kayan noktalı sayılar olarak saklanan bir Sayı türüne sahiptir. Puanınız, C #, C ++ gibi tam sayı türlerine sahip olan, ancak aslında JavaScript için geçerli olmayan diğer diller için geçerlidir.
Simon Brangwin

1
@SimonBrangwin Onun noktası hala geçerli, ancak anlambilim kafa karıştırıcı olabilir. Gerçekte kastettiği, "para birimini yalnızca tam sayılar olarak javascript'te saklayın çünkü bunlar kayan noktalı sayılar olarak saklanacaktır".
Josh Noe

1
Sadece bir hatırlatma: parseFloat('22w')is 22and parseFloat('w22')isNaN
IG Pascual

65

Ayrıca şunu da kullanabilirsiniz: NumberYapıcı / işlevi (bir tabana gerek yoktur ve hem tamsayılar hem de kayan sayılar için kullanılabilir):

Number('09'); /=> 9
Number('09.0987'); /=> 9.0987

Alternatif olarak Andy E'nin yorumlarda söylediği gibi +dönüştürme için kullanabileceğiniz

+'09'; /=> 9
+'09.0987'; /=> 9.0987

Bu, IE11 tarafından desteklenmiyor
Pantolon

@Pants, ES6'daki Number yerleşik nesnesinin Uzantıları ile ilgili, kullanabilmekle ilgili değilNumber
KooiInc

11

Bu çalışıyor:

var num = parseFloat(document.getElementById(amtid4).innerHTML, 10).toFixed(2);


2

Sayılarla karşılaştırmak ve oynamak için javascript işlevlerine güvenmek oldukça risklidir. JavaScript'te (0.1 + 0.2 == 0.3), yuvarlama hataları nedeniyle yanlış döndürür. Math.js kitaplığını kullanın.


1

Kolay ve kısa bir el yolu + x kullanmaktır. Bu, ondalık sayıların yanı sıra işareti sağlam tutar. Diğer alternatif, parseFloat (x) kullanmaktır. ParseFloat (x) ve + x arasındaki fark, boş bir dize içindir + x, 0 değerini döndürürken, parseFloat (x), NaN değerini döndürür.


1

Bunu yapmak ve tüm hatalı biçimlendirilmiş verileri yakalamak için küçük bir yardımcı işlev yaptım

function convertToPounds(str) { 
    var n = Number.parseFloat(str);
    if(!str || isNaN(n) || n < 0) return 0;
    return n.toFixed(2);
}

Demo burada

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.