Saya mencoba mengurai dua nilai dari datagrid. Kolom adalah numerik, dan ketika mereka memiliki koma (mis. 554,20), saya tidak bisa mendapatkan angka setelah koma. Saya sudah mencoba parseInt
dan parseFloat
. Bagaimana saya bisa melakukan ini?
Saya mencoba mengurai dua nilai dari datagrid. Kolom adalah numerik, dan ketika mereka memiliki koma (mis. 554,20), saya tidak bisa mendapatkan angka setelah koma. Saya sudah mencoba parseInt
dan parseFloat
. Bagaimana saya bisa melakukan ini?
Jawaban:
Jika itu dimaksudkan sebagai nilai yang terpisah, coba ini:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
Jika mereka dimaksudkan sebagai nilai tunggal (seperti dalam bahasa Prancis, di mana satu-setengah ditulis 0,5)
var value = parseFloat("554,20".replace(",", "."));
+(string)
bukan parseString(string)
seperti yang disarankan oleh @Stev di bawah ini. Jadi, contoh pertama adalah v1 = +(values[0]); v2 = +(values[1]);
.
6.000.000
. Ganti fungsi hanya ganti pemisah koma pertama
Pernahkah Anda mencoba melakukan ini? : p
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (string) akan melemparkan string ke float.
Berguna!
Jadi untuk menyelesaikan masalah Anda, Anda dapat melakukan sesuatu seperti ini:
var floatValue = +(str.replace(/,/,'.'));
+(str)
solusinya - parseFloat
mengabaikan karakter yang tidak valid setelah nomor, +(str)
mengembalikan NaN
dalam kasus-kasus itu, itulah yang saya butuhkan.
Ganti koma dengan titik.
Ini hanya akan mengembalikan 554:
var value = parseFloat("554,20")
Ini akan mengembalikan 554.20:
var value = parseFloat("554.20")
Jadi pada akhirnya, Anda cukup menggunakan:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
Jangan lupa bahwa parseInt()
seharusnya hanya digunakan untuk mem-parsing bilangan bulat (tidak ada floating point). Dalam kasus Anda, ia hanya akan mengembalikan 554. Selain itu, memanggil parseInt () pada float tidak akan membulatkan angka: ia akan mengambil lantai (bilangan bulat terdekat terdekat).
Contoh luas untuk menjawab pertanyaan Pedro Ferreira dari komentar:
Jika bidang teks berisi ribuan titik pemisah seperti di dalamnya 1.234.567,99
dapat dihilangkan sebelumnya dengan yang lain replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
Jika Anda memperluas objek String seperti ini ..
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
.. Anda bisa menjalankannya seperti ini
"554,20".float()
> 554.20
bekerja dengan dot juga
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool atau orang lain mencoba untuk mengganti lebih dari satu pemisah ribuan, salah satu cara untuk melakukannya adalah regex global yang menggantikan: /foo/g
. Ingatlah bahwa itu .
adalah metacharacter, jadi Anda harus menghindarinya atau memasukkannya ke dalam tanda kurung ( \.
atau [.]
). Inilah satu opsi:
var str = '6.000.000';
str.replace(/[.]/g,",");
Anda dapat menggunakan fungsi ini. Ini akan mengganti koma dengan '' dan kemudian akan mem-parseFlaot nilai dan setelah itu lagi akan menyesuaikan koma dalam nilai.
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;
}
Saya memiliki masalah yang sama kecuali saya tidak tahu sebelumnya apa yang merupakan pemisah ribuan dan pemisah desimal. Saya akhirnya menulis perpustakaan untuk melakukan ini. Jika Anda tertarik di sini adalah: https://github.com/GuillaumeLeclerc/number-parsing
Mencoba
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});