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 parseInty 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 parseInty 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: parseFloatignora los caracteres no válidos después del número, +(str)devuelve NaNen 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,99esos 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});