Bagaimana cara mengubah string menjadi float di JavaScript?


Jawaban:


371

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(",", "."));

6
Bagaimana dengan di mana Anda memiliki koma yang digunakan sebagai pemisah seribu? Misalnya 1234 ditulis sebagai 1.234
Chris B

6
Anda bisa menghapus koma, lalu menguraikannya. (mis. ganti dengan "")
Jesse Rusak

7
itu tidak terlalu aman, seperti sconto = parseFloat ("5,, 5" .replace (",", ".")); mengembalikan 5 yang memimpin untuk meyakini bahwa ini adalah angka yang valid, tetapi Anda kehilangan bagian .5 atau Anda dapat menganggapnya bukan angka yang valid
max4ever

1
@ max4ever Jika Anda khawatir tentang diam-diam menerima nomor yang tidak valid, Anda dapat menggunakan, +(string)bukan parseString(string)seperti yang disarankan oleh @Stev di bawah ini. Jadi, contoh pertama adalah v1 = +(values[0]); v2 = +(values[1]);.
Jesse Rusak

1
GAGAL, ​​bagaimana jika nomor saya 6.000.000. Ganti fungsi hanya ganti pemisah koma pertama
GusDeCooL

55

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(/,/,'.'));

7
Saya sangat suka +(str)solusinya - parseFloatmengabaikan karakter yang tidak valid setelah nomor, +(str)mengembalikan NaNdalam kasus-kasus itu, itulah yang saya butuhkan.
Alex

34

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,99dapat dihilangkan sebelumnya dengan yang lain replace:

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

Bagaimana tentang "." ribuan pemisah? Seperti 4.554.20, apa yang akan kembali ...?
Pedro Ferreira

16

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"

10
Meskipun biasanya dianggap bentuk buruk untuk memodifikasi prototipe objek dasar. Bagaimana jika kerangka kerja lain juga mencoba melakukan itu tetapi fungsinya berbeda?
phreakhead

3

@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,",");

1
ya, penggantian tanpa regex hanya menggantikan satu kemunculan karakter.
Aukhan

2

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;
    }


-1

Mencoba

let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);

console.log({float,int});

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.