He aquí un escenario sencillo. Quiero mostrar la resta de dos valores que se muestran en mi sitio:
//Value on my websites HTML is: "75,00"
var fullcost = parseFloat($("#fullcost").text());
//Value on my websites HTML is: "0,03"
var auctioncost = parseFloat($("#auctioncost").text());
alert(fullcost); //Outputs: 75
alert(auctioncost); //Ouputs: 0
¿Alguien puede decirme qué estoy haciendo mal?
javascript
parsefloat
Solo bolivianos aquí
fuente
fuente

5.200,75que significa cinco mil doscientos punto setenta y cinco.parseFloat de javascript no toma un parámetro de configuración regional. Entonces tendrás que reemplazar
,con.parseFloat('0,04'.replace(/,/, '.')); // 0.04fuente
¿Por qué no utilizar globalizar? Este es solo uno de los problemas con los que puede encontrarse cuando no usa el idioma inglés:
Globalize.parseFloat('0,04'); // 0.04Algunos enlaces en stackoverflow para mirar:
fuente
parseFloatanaliza de acuerdo con la definición de JavaScript de un literal decimal , no la definición de su configuración regional. (Por ejemplo,parseFloatno reconoce la configuración regional). Los literales decimales en JavaScript se utilizan.para el punto decimal.fuente
Como señaló @JaredPar en su respuesta, use
parseFloatcon reemplazarvar fullcost = parseFloat($("#fullcost").text().replace(',', '.'));Simplemente reemplazando el
commacon undotarreglo de voluntad, a menos que sea un número superior a los miles, de1.000.000,00esta manera obtendrá el dígito incorrecto. Por lo tanto, debe reemplazar elcommaarchivodots.// Remove all dot's. Replace the comma. var fullcost = parseFloat($("#fullcost").text().replace(/\./g,'').replace(',', '.'));Al usar dos reemplazos, podrá manejar los datos sin recibir dígitos incorrectos en la salida.
fuente
Es mejor usar esta sintaxis para reemplazar todas las comas en un caso de un millón 1,234,567
var string = "1,234,567"; string = string.replace(/[^\d\.\-]/g, ""); var number = parseFloat(string); console.log(number)Los
gmedios para eliminar todas las comas.Consulte la demostración de Jsfiddle aquí .
fuente
Los números en JS usan un carácter
.(punto / punto) para indicar el punto decimal, no una,(coma).fuente
Para cualquiera que llegue aquí y se pregunte cómo lidiar con este problema en el que las comas (
,) y los puntos ( ).pueden estar involucrados, pero es posible que no se conozca el formato de número exacto; así es como corrijo una cadena antes de usarparseFloat()(tomando prestadas ideas de otras respuestas):function preformatFloat(float){ if(!float){ return ''; }; //Index of first comma const posC = float.indexOf(','); if(posC === -1){ //No commas found, treat as float return float; }; //Index of first full stop const posFS = float.indexOf('.'); if(posFS === -1){ //Uses commas and not full stops - swap them (e.g. 1,23 --> 1.23) return float.replace(/\,/g, '.'); }; //Uses both commas and full stops - ensure correct order and remove 1000s separators return ((posC < posFS) ? (float.replace(/\,/g,'')) : (float.replace(/\./g,'').replace(',', '.'))); };// <-- parseFloat(preformatFloat('5.200,75')) // --> 5200.75Como mínimo, esto permitiría analizar los formatos decimales británicos / estadounidenses y europeos (asumiendo que la cadena contiene un número válido).
fuente
1,234.56y1.234,56En mi caso, ya tenía un punto
(.)y también una coma(,), así que lo que funcionó para mí fuereplacela coma(,)con una cadena vacía como la siguiente:parseFloat('3,000.78'.replace(',', ''))Esto asumiendo que la cantidad de la base de datos existente es 3,000.78. Los resultados son:
3000.78sin la coma inicial(,).fuente
Desde mi país de origen, el formato de moneda es como "3.050,89 €"
parseFloat identifica el punto como separador decimal, para sumar 2 valores podríamos ponerlo así:
parseFloat(element.toString().replace(/\./g,'').replace(',', '.'))fuente