przekonwertować zmienną łańcuchową JavaScript na dziesiętną / pieniądze

114

Jak możemy przekonwertować zmienną łańcuchową JavaScript na dziesiętną?

Czy jest taka funkcja jak:

parseInt(document.getElementById(amtid4).innerHTML)
Varada
źródło

Odpowiedzi:

240

Tak - parseFloat.

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

Do formatowania liczb użyj toFixed:

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

num jest teraz łańcuchem z liczbą sformatowaną z dwoma miejscami po przecinku.

samotny dzień
źródło
1
Czy możemy utworzyć tę zmienną z 2 miejscami po przecinku, na przykład 120,50? w tej chwili otrzymuję tylko 120,5.
Varada
16
Cytując @PhilipWhitehouse "Proszę, każdemu, kto będzie czytał to w przyszłości, nie używaj liczby zmiennoprzecinkowej do przechowywania waluty. Stracisz precyzję i dane. Powinieneś zapisać ją jako całkowitą liczbę centów (lub pensów itp.), A następnie przeliczyć wcześniej do wyjścia. ”. Źródło: stackoverflow.com/questions/149055/…
SSH,
@SSHThis O ile wiem, JavaScript nie ma typu całkowitego. Ma tylko typ liczbowy, który jest przechowywany wewnętrznie jako 64-bitowe liczby zmiennoprzecinkowe. Twój punkt jest ważny dla innych języków, które mają typy całkowite, takie jak C #, C ++, ale tak naprawdę nie dla JavaScript.
Simon Brangwin,
1
@SimonBrangwin Jego punkt widzenia jest nadal aktualny, ale semantyka może być myląca. Tak naprawdę ma na myśli to, że „przechowuj walutę tylko jako liczby całkowite w javascript, ponieważ będą one przechowywane jako liczby zmiennoprzecinkowe”.
Josh Noe
1
Tylko przypomnienie: parseFloat('22w')jest 22i parseFloat('w22')jestNaN
IG Pascual
65

Możesz także użyć Numberkonstruktora / funkcji (nie jest potrzebna podstawa i może być używana zarówno dla liczb całkowitych, jak i zmiennoprzecinkowych):

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

Alternatywnie, jak powiedział Andy E w komentarzach, których możesz użyć +do konwersji

+'09'; /=> 9
+'09.0987'; /=> 9.0987
KooiInc
źródło
Nie jest to obsługiwane przez IE11
spodnie,
@Pants, które dotyczą rozszerzeń obiektu wbudowanego Number w ES6 , a nie możliwości użyciaNumber
KooiInc
11

To działa:

var num = parseFloat(document.getElementById(amtid4).innerHTML, 10).toFixed(2);
Sanjay
źródło
2

Poleganie na funkcjach javascript do porównywania liczb i zabawy z nimi jest dość ryzykowne. W javascript (0,1 + 0,2 == 0,3) zwróci fałsz z powodu błędów zaokrągleń. Użyj biblioteki math.js.

dondrzzy
źródło
1

Łatwym sposobem na krótkie rozdanie byłoby użycie + x. Utrzymuje znak nienaruszony, a także liczby dziesiętne. Inną alternatywą jest użycie parseFloat (x). Różnica między parseFloat (x) i + x dotyczy pustego łańcucha + x zwraca 0, gdzie parseFloat (x) zwraca NaN.

Tushar Sagar
źródło
1

Stworzyłem małą funkcję pomocniczą, aby to zrobić i złapać wszystkie zniekształcone dane

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

Demo jest tutaj

sidonaldson
źródło