Estoy tratando de analizar dos valores de una cuadrícula de datos. Los campos son numéricos, y cuando tienen una coma (ej. 554,20), no puedo obtener los números después de la coma. Lo he intentado parseInt
y parseFloat
. ¿Cómo puedo hacer esto?
Estoy tratando de analizar dos valores de una cuadrícula de datos. Los campos son numéricos, y cuando tienen una coma (ej. 554,20), no puedo obtener los números después de la coma. Lo he intentado parseInt
y parseFloat
. ¿Cómo puedo hacer esto?
Respuestas:
Si están destinados a ser valores separados, intente esto:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
Si están destinados a ser un valor único (como en francés, donde la mitad se escribe 0,5)
var value = parseFloat("554,20".replace(",", "."));
+(string)
lugar de lo parseString(string)
que sugiere @Stev a continuación. Entonces, el primer ejemplo sería v1 = +(values[0]); v2 = +(values[1]);
.
6.000.000
? La función reemplazar solo reemplaza el primer separador de coma
¿Alguna vez has tratado de hacer esto? :pags
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (cadena) convertirá la cadena en flotante.
¡Práctico!
Entonces, para resolver su problema, puede hacer algo como esto:
var floatValue = +(str.replace(/,/,'.'));
+(str)
solución: parseFloat
ignora los caracteres no válidos después del número, +(str)
devuelve NaN
en esos casos, que es exactamente lo que necesito.
Reemplace la coma con un punto.
Esto solo devolverá 554:
var value = parseFloat("554,20")
Esto devolverá 554.20:
var value = parseFloat("554.20")
Entonces, al final, simplemente puede usar:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
No olvide que parseInt()
solo debe usarse para analizar enteros (sin puntos flotantes). En su caso, solo devolverá 554. Además, llamar a parseInt () en un flotante no redondeará el número: tomará su piso (el entero inferior más cercano).
Ejemplo extendido para responder la pregunta de Pedro Ferreira de los comentarios:
Si el campo de texto contiene miles de puntos de separación, como en 1.234.567,99
esos podrían eliminarse de antemano con otro replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
Si extiende un objeto String como este ...
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
.. puedes ejecutarlo así
"554,20".float()
> 554.20
funciona con punto también
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool o cualquier otra persona tratando de reemplazar más de un separadores de miles, una forma de hacerlo es una expresión regular reemplazo global: /foo/g
. Solo recuerde que .
es un metacarácter, por lo que debe escapar o ponerlo entre paréntesis ( \.
o [.]
). Aquí hay una opción:
var str = '6.000.000';
str.replace(/[.]/g,",");
Puedes usar esta función. Reemplazará las comas con '' y luego analizará el valor del plano y luego ajustará nuevamente el valor de las comas.
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;
}
Tuve el mismo problema, excepto que no sabía de antemano cuáles eran los separadores de miles y el separador decimal. Terminé escribiendo una biblioteca para hacer esto. Si te interesa, aquí está: https://github.com/GuillaumeLeclerc/number-parsing
Tratar
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});