Próbuję przeanalizować dwie wartości z siatki danych. Pola są numeryczne, a gdy mają przecinek (np. 554,20), nie mogę uzyskać liczb po przecinku. Próbowałem parseInt
i parseFloat
. W jaki sposób mogę to zrobić?
Próbuję przeanalizować dwie wartości z siatki danych. Pola są numeryczne, a gdy mają przecinek (np. 554,20), nie mogę uzyskać liczb po przecinku. Próbowałem parseInt
i parseFloat
. W jaki sposób mogę to zrobić?
Odpowiedzi:
Jeśli mają to być osobne wartości, spróbuj tego:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
Jeśli mają być pojedynczą wartością (jak w języku francuskim, gdzie połowa jest zapisana 0,5)
var value = parseFloat("554,20".replace(",", "."));
+(string)
zamiast parseString(string)
sugerowanego przez @Stev poniżej. Tak więc pierwszym przykładem byłby v1 = +(values[0]); v2 = +(values[1]);
.
6.000.000
. Funkcja zamiany zastępuje tylko pierwszy separator przecinków
Czy kiedykolwiek próbowałeś to zrobić? : p
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (ciąg) wyrzuci ciąg do pływaka.
Poręczny!
Aby rozwiązać problem, możesz zrobić coś takiego:
var floatValue = +(str.replace(/,/,'.'));
+(str)
rozwiązanie - parseFloat
ignoruje niepoprawne znaki po numerze, +(str)
zwraca NaN
w tych przypadkach, co jest dokładnie tym, czego potrzebuję.
Zastąp przecinek kropką.
Zwróci tylko 554:
var value = parseFloat("554,20")
Zwróci 554,20:
var value = parseFloat("554.20")
W końcu możesz po prostu użyć:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
Nie zapomnij o tym parseInt()
należy go używać tylko do analizowania liczb całkowitych (bez zmiennoprzecinkowych). W twoim przypadku zwróci tylko 554. Dodatkowo wywołanie parseInt () na liczbach zmiennoprzecinkowych nie zaokrągli liczby: zajmie jej podłogę (najbliższa dolna liczba całkowita).
Rozszerzony przykład odpowiedzi na pytanie Pedro Ferreiry z komentarzy:
Jeśli pole tekstowe zawiera tysiące kropek separujących, tak jak w 1.234.567,99
tych, można je wcześniej usunąć za pomocą innej replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
Jeśli rozszerzysz obiekt String w ten sposób ..
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
.. możesz uruchomić to w ten sposób
"554,20".float()
> 554.20
działa również z kropką
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool lub ktoś próbuje zastąpić więcej niż jeden tysięcy separatory, jednym ze sposobów, aby to zrobić jest regex globalny wymienić: /foo/g
. Pamiętaj tylko, że .
jest to metaznak, więc musisz uciec lub umieścić go w nawiasach ( \.
lub [.]
). Oto jedna opcja:
var str = '6.000.000';
str.replace(/[.]/g,",");
Możesz użyć tej funkcji. Zastąpi przecinki znakiem „”, a następnie przeanalizuje wartość Flaot, a następnie ponownie dostosuje wartość przecinków.
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;
}
Miałem ten sam problem, tyle że nie wiedziałem z góry, jakie są separatory tysięcy i separator dziesiętny. W tym celu napisałem bibliotekę. Jeśli jesteś zainteresowany to tutaj: https://github.com/GuillaumeLeclerc/number-parsing
Próbować
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});