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,75
que 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.04
fuente
¿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.04
Algunos enlaces en stackoverflow para mirar:
fuente
parseFloat
analiza de acuerdo con la definición de JavaScript de un literal decimal , no la definición de su configuración regional. (Por ejemplo,parseFloat
no 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
parseFloat
con reemplazarvar fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
Simplemente reemplazando el
comma
con undot
arreglo de voluntad, a menos que sea un número superior a los miles, de1.000.000,00
esta manera obtendrá el dígito incorrecto. Por lo tanto, debe reemplazar elcomma
archivodots
.// 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
g
medios 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.75
Como 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.56
y1.234,56
En mi caso, ya tenía un punto
(.)
y también una coma(,)
, así que lo que funcionó para mí fuereplace
la 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.78
sin 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