2013-08-23 16 views
14

użyłem tej funkcji, aby sprawdzić, czy dana liczba jest liczbą:Parsing numery z separator przecinek dziesiętny w JavaScript

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

Mój program musi pracować z wartościami niemieckich. Używamy przecinka jako separatora dziesiętnego zamiast kropki, więc ta funkcja nie działa.

Próbowałem to zrobić:

n.replace(",",".") 

Ale to również nie wydają się działać. Dokładna funkcja Próbuję użyć to:

function isNumber(n) { 
    n=n.replace(",","."); 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

Numer wygląda to 9.000,28 zamiast zwykłego 9,000.28 jeśli moja wypowiedź nie była wystarczająco jasna.

+2

Are re '.'s gdy liczba jest większa niż 999? –

+2

Należy pamiętać, że 'replace' * zwraca * nowy ciąg znaków. –

+1

Proszę zaksięguj pełny kod używając 'replace'. To powinno wystarczyć, więc musi być coś jeszcze nie tak. –

Odpowiedz

16

trzeba wymienić (usunąć) kropki pierwszy w separatora tysięcy, a potem zająć się po przecinku:

function isNumber(n) { 
    'use strict'; 
    n = n.replace(/\./g, '').replace(',', '.'); 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 
+0

to wydaje się działać – Chaos

+0

Nie działa z '111.222.3333,44'. [demo] (http://jsfiddle.net/Z8nAX/1/). '.replace' zastępuje tylko pierwsze dopasowanie, chyba że masz globalne wyrażenie regularne. * edit: whoops zawiedli ciąg wejściowy * – FakeRainBrigand

+0

@FakeRainBrigand Dzięki, zaktualizowałem swój kod. Nie bardzo dobrze z wyrażeń regularnych, czy wydaje ci się to właściwe? –

12
var number = parseFloat(obj.value.replace(",","")); 

Ty pewnie też chce to iść w drugą stronę .. .

obj.value = number.toLocaleString('en-US', {minimumFractionDigits: 2}); 
+1

To jest najlepszy sposób !! Dzięki. – Raugaral

1

Spróbuj

function isNumber(n) { 
    n=n.replace(/,/, ''); 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 
Powiązane problemy