2010-03-31 21 views
13

Puede alguien por favor me ayude a cabo con una solución JavaScript/jQuery para este problema aritmético:moneda Matemáticas en JavaScript

tengo que restar un número de otro.

El problema es que los números tienen un signo de dólar (porque es dinero), por lo tanto jQuery los trata como cadenas en lugar de números.

He creado dos variables - toalAssets y totalLiabilites. Me gustaría restar este último del anterior y colocar el resultado en otra variable llamada netWorth.

¿Quizás necesito usar parseFloat()?

Pero no estoy seguro cómo - ¡Esto es todo un poco sobre mi cabeza!

+0

@Mark: solo le han hecho 5 preguntas y tiene 36 rep, por lo que obviamente es nuevo en el sitio. – DisgruntledGoat

+3

@Jared: puede volver a sus preguntas anteriores (haga clic en su nombre de usuario en la parte superior) y acepte las respuestas si corresponde. Es probable que más personas respondan preguntas futuras. – DisgruntledGoat

+0

"Miembro durante 6 meses" –

Respuesta

29
var totalLiabilites = '$52.34'; 
var toalAssets  = '$85.12'; 
var pattern   = /[^0-9.-]+/g; 

var result = parseFloat(toalAssets.replace(pattern, '')) - 
      parseFloat(totalLiabilites.replace(pattern, '')); 

// result: 32.78 

Nota: En JavaScript se recomienda para manejar el dinero como un entero que representa el número de centavos (8512 en lugar de 85,12). Esto es para evitar problemas con la aritmética de coma flotante. 0.1 + 0.2 == 0.3 devuelve falso en JavaScript, pero afortunadamente la aritmética de enteros en coma flotante es exacta, por lo que los errores de representación decimal se pueden evitar escalando.

Es posible que desee comprobar el siguiente post para leer más sobre este tema: Is JavaScript’s math broken?

Siempre se puede aplicar el formato de moneda-signo cuando los valores se representan en el navegador.


Douglas Crockford: JavaScript: The Good Parts: Appendix A - Awful Parts (page 105).

+0

Se actualizó su patrón para permitir negativos. –

+0

@Peter: Gracias por la actualización :) –

+0

Gracias por el asesoramiento sobre buenas prácticas. – Jazzepi

6

parseFloat() no funcionará porque su cadena comienza con un número no, el signo de dólar.

Puede simplemente hacer una Reemplazar para eliminar el signo del dólar, junto con una parseFloat para obtener el valor:

totalAssets = parseFloat(totalAssets.replace('$', '')); 
totalLiabilities = parseFloat(totalLiabilities.replace('$', '')); 

var difference = '$' + (totalAssets - totalLiabilities); 

Este código sustituye a sus cadenas originales con flotadores. También puedes cargarlos en nuevas variables. Del mismo modo, la diferencia no tiene que tener el '$' antepuesto.

1
var a = "$20"; 
var b = "$34"; 
var c = parseFloat(a.replace(/[^0-9\.]+/g, "")) - parseFloat(b.replace(/[^0-9\.]+/g, "")); 
alert(c); 
+0

Daniel: ¿qué significa este engorro, por favor? /[^0-9\.]+/g, "" – swisstony

+0

http://www.regular-expressions.info/reference.html – XGreen