Bir datagrid iki değer ayrıştırmaya çalışıyorum. Alanlar sayısaldır ve virgül kullandıklarında (ör. 554,20), virgülden sonraki sayıları alamıyorum. Denedim parseInt
ve parseFloat
. Bunu nasıl yapabilirim?
Bir datagrid iki değer ayrıştırmaya çalışıyorum. Alanlar sayısaldır ve virgül kullandıklarında (ör. 554,20), virgülden sonraki sayıları alamıyorum. Denedim parseInt
ve parseFloat
. Bunu nasıl yapabilirim?
Yanıtlar:
Ayrı değerler olması gerekiyorsa, şunu deneyin:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
Tek bir değer olması gerekiyorsa (yarısının 0,5 yazıldığı Fransızca gibi)
var value = parseFloat("554,20".replace(",", "."));
+(string)
yerine kullanabilirsiniz parseString(string)
. Yani, ilk örnek olurdu v1 = +(values[0]); v2 = +(values[1]);
.
6.000.000
. Fonksiyon değiştirme sadece ilk virgül ayırıcıyı değiştir
Bunu hiç denedin mi? : p
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (string) stringi float haline getirir.
Kullanışlı!
Yani probleminizi çözmek için böyle bir şey yapabilirsiniz:
var floatValue = +(str.replace(/,/,'.'));
+(str)
Çözümü gerçekten seviyorum - parseFloat
sayıdan sonra geçersiz karakterleri yok sayar , bu durumlarda +(str)
geri döner NaN
, tam da ihtiyacım olan şey budur.
Virgül ile bir nokta değiştirin.
Bu yalnızca 554 değerini döndürür:
var value = parseFloat("554,20")
Bu 554.20 döndürecektir:
var value = parseFloat("554.20")
Sonuçta, şunları kullanabilirsiniz:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
Bunun parseInt()
yalnızca tamsayıları ayrıştırmak için kullanılması gerektiğini unutmayın (kayan nokta yok). Sizin durumunuzda sadece 554 döndürür. Ayrıca, bir kayan nokta üzerinde parseInt () çağrılması sayıyı yuvarlamaz: zemini alır (en yakın düşük tamsayı).
Pedro Ferreira'un sorusuna yorumlardan cevap vermek için genişletilmiş örnek:
Metin alanı, 1.234.567,99
bunlarda olduğu gibi binlerce ayırıcı nokta içeriyorsa, önceden başka bir ile ortadan kaldırılabilir replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
String nesnesini böyle genişletirseniz ..
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
.. böyle çalıştırabilirsin
"554,20".float()
> 554.20
nokta ile de çalışır
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool veya bunu yapmanın bir yolu birden fazla binlerce ayırıcılar değiştirmeye çalışırken başkasının küresel regex yerine geçerli: /foo/g
. Bunun .
bir metakarakter olduğunu unutmayın , bu yüzden kaçmanız veya parantez ( \.
veya [.]
) içine koymanız gerekir . İşte bir seçenek:
var str = '6.000.000';
str.replace(/[.]/g,",");
Bu işlevi kullanabilirsiniz. Virgüllerin yerini '' alır ve sonra değeri ayrıştırır ve bundan sonra virgül değerini tekrar ayarlar.
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;
}
Binlerce ayırıcı ve ondalık ayırıcı ne olduğunu önceden bilmiyordum dışında aynı sorun vardı. Bunu yapmak için bir kütüphane yazdım. Eğer ilgileniyorsanız burada: https://github.com/GuillaumeLeclerc/number-parsing
Deneyin
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});