Come convertire una stringa in float in JavaScript?


Risposte:


371

Se devono essere valori separati, prova questo:

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

Se intendono essere un valore singolo (come in francese, dove la metà è scritta 0,5)

var value = parseFloat("554,20".replace(",", "."));

6
Che dire di dove hai una virgola utilizzata come mille separatore? Ad esempio 1234 scritto come 1.234
Chris B,

6
Potresti semplicemente rimuovere la virgola, quindi analizzarla. (es. sostituiscilo con "")
Jesse Rusak il

7
non è molto sicuro, come sconto = parseFloat ("5,, 5" .replace (",", ".")); restituisce 5 portando uno a credere che sia un numero valido, ma perdi la parte .5 o potresti considerare che non è un numero valido
max4ever

1
@ max4ever Se sei preoccupato di accettare silenziosamente numeri non validi, puoi utilizzare +(string)invece parseString(string)come suggerito da @Stev di seguito. Quindi, il primo esempio sarebbe v1 = +(values[0]); v2 = +(values[1]);.
Jesse Rusak,

1
FAIL, e se il mio numero fosse 6.000.000. La funzione di sostituzione sostituisce solo il primo separatore di virgola
GusDeCooL,

55

Hai mai provato a farlo? : p

var str = '3.8';ie
alert( +(str) + 0.2 );

+ (stringa) lancerà la stringa in float.

Maneggevole!

Quindi, al fine di risolvere il tuo problema, puoi fare qualcosa del genere:

var floatValue = +(str.replace(/,/,'.'));

7
Mi piace molto la +(str)soluzione: parseFloatignora i caratteri non validi dopo il numero, +(str)ritorna NaNin quei casi, che è esattamente ciò di cui ho bisogno.
Alex,

34

Sostituisci la virgola con un punto.

Questo restituirà solo 554:

var value = parseFloat("554,20")

Ciò restituirà 554.20:

var value = parseFloat("554.20")

Quindi, alla fine, puoi semplicemente usare:

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

Non dimenticare che parseInt()dovrebbe essere utilizzato solo per analizzare numeri interi (senza punti mobili). Nel tuo caso restituirà solo 554. Inoltre, chiamare parseInt () su un float non arrotonderà il numero: prenderà il suo piano (intero inferiore più vicino).


Esempio esteso per rispondere alla domanda di Pedro Ferreira dai commenti:

Se il campo di testo contiene migliaia di punti di separazione come 1.234.567,99quelli che potrebbero essere eliminati in anticipo con un altro replace:

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

Cosa ne pensi riguardo a "." separatore delle migliaia? Come 4.554,20 cosa ritornerebbe ...?
Pedro Ferreira,

16

Se estendi l'oggetto String in questo modo ...

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

.. puoi eseguirlo in questo modo

"554,20".float()
> 554.20

funziona anche con punto

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"

10
Anche se di solito è considerato una cattiva forma per modificare i prototipi di oggetti base. E se anche un altro framework provasse a farlo ma la funzionalità differiva?
phreakhead il

3

@GusDeCool o chiunque altro cercando di sostituire più di un separatori di migliaia, un modo per farlo è una regex sostituzione globale: /foo/g. Ricorda solo che si .tratta di un metacarattere, quindi devi evitarlo o metterlo tra parentesi ( \.o [.]). Ecco un'opzione:

var str = '6.000.000';
str.replace(/[.]/g,",");

1
sì, un rimpiazzo senza regex sostituisce solo un'occorrenza del personaggio.
Aukhan,

2

Puoi usare questa funzione. Sostituirà le virgole con '' e quindi analizzerà il valore e successivamente modificherà nuovamente le virgole in valore.

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

Provare

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

console.log({float,int});

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.