2009-03-13 23 views

Odpowiedz

285

Jeśli oni miało być odrębne wartości, spróbuj tego:

var values = "554,20".split(",") 
var v1 = parseFloat(values[0]) 
var v2 = parseFloat(values[1]) 

Jeśli oni miało być pojedynczą wartość (jak w języku francuskim, gdzie jedna połowa jest napisane 0,5)

var value = parseFloat("554,20".replace(",", ".")); 
+6

A gdzie masz przecinek używany jako tysiąc seperatora? E.g. 1234 napisany jako 1 2334 –

+6

Możesz po prostu usunąć przecinek, a następnie przeanalizować go. (np. zamień go na "") –

+6

nie jest bardzo bezpieczny, jak sconto = parseFloat ("5,, 5" .replace (",", ".")); zwraca 5 wiodących, aby uwierzyć, że jest to poprawna liczba, ale tracisz część .5 lub możesz uznać, że to nie jest poprawna liczba. – max4ever

26

Zamień przecinek na kropkę.

ten powróci tylko 554:

var value = parseFloat("554,20") 

ten powróci 554.20:

var value = parseFloat("554.20") 

więc w końcu, można po prostu użyć:

var fValue = parseFloat(document.getElementById("textfield").value.replace(",",".")) 

Nie zapomnij że parseInt() powinno być używane tylko do analizowania liczb całkowitych (bez liczb zmiennoprzecinkowych). W twoim przypadku zwróci on tylko 554. Dodatkowo, wywołanie funkcji parseInt() na float nie zaokrągli liczby: zajmie jej piętro (najbliższa niższa liczba całkowita).

+0

Co o separator tysięcy? Jak 4,554,20, co powróci ...? –

42

Czy kiedykolwiek próbowałeś to zrobić? : p

var str = '3.8';ie 
alert(+(str) + 0.2); 

+ (ciąg znaków) rzuci łańcuch w spławik.

Handy!

Tak więc w celu rozwiązania problemu, można zrobić coś takiego:

var floatValue = +(str.replace(/,/,'.')); 
+6

Bardzo podoba mi się rozwiązanie '+ (str)' - parametr 'parseFloat' ignoruje nieprawidłowe znaki po numerze,' + (str) 'zwraca' NaN' w tych przypadkach, co jest dokładnie tym, czego potrzebuję. – Alex

+0

Wygląda na to, że jest to najlepsza odpowiedź, podobnie jak w przypadku rzutowania na int przez dwukrotne zmienianie znaku z ~, jak w ~~ "45.2" = 45 –

13

Jeśli przedłużyć obiekt String tak ..

String.prototype.float = function() { 
    return parseFloat(this.replace(',', '.')); 
} 

.. można go uruchomić w ten sposób

"554,20".float() 
> 554.20 

współpracuje z kropką oraz

"554.20".float() 
> 554.20 

typeof "554,20".float() 
> "number" 
+7

Chociaż zwykle uważa się za złą formę modyfikowanie prototypów obiektów podstawowych. Co by było, gdyby inne ramy również tego próbowały, ale funkcjonalność była różna? – phreakhead

2

@GusDeCool lub ktokolwiek inny próbuje zastąpić więcej niż jeden separator tysięcy, jednym ze sposobów jest zastąpienie globalnego regex: /foo/g. Pamiętaj tylko, że . jest metaznakiem, więc musisz go uciec lub umieścić w nawiasach (\. lub [.]). Oto jedna opcja:

var str = '6.000.000'; 
str.replace(/[.]/g,","); 
+1

tak, zamiennik bez regex zastępuje tylko jedno wystąpienie znaku. – Aukhan

3

Możesz użyć tej funkcji.Zastąpi przecinki "", a następnie przeanalizuje wartość, a następnie ponownie dostosuje przecinki do wartości.

function convertToFloat(val) { 
     if (val != '') { 
      if (val.indexOf(',') !== -1) 
       val.replace(',', ''); 
      val = parseFloat(val); 
      while (/(\d+)(\d{3})/.test(val.toString())) { 
       val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2'); 
      } 
     } 
     return val; 
    } 
Powiązane problemy