2010-03-31 38 views
13

是否有人可以帮助我走出这个算术题一个JavaScript/jQuery的解决方案:货币数学在JavaScript

我需要减去从另一个数字。

问题是数字有一个美元符号(因为它的钱),因此jQuery将它们视为字符串而不是数字。

我已经创建了两个变量 - toalAssetstotalLiabilites。我想从前者中减去后者,并将结果放入另一个名为netWorth的变量中。

也许我需要使用parseFloat()

但我不知道如何 - 这一切都超过了我的头!

+0

@Mark:他只被问了5个问题,并有36个代表,所以显然是新的网站。 – DisgruntledGoat 2010-03-31 20:47:48

+3

@Jared:您可以回到您的旧问题(点击顶部的用户名),并在适当的时候接受他们的答案。更多的人可能会回答未来的问题。 – DisgruntledGoat 2010-03-31 20:48:44

+0

“会员6个月” – 2010-03-31 20:49:21

回答

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 

注:在JavaScript中建议处理钱作为表示美分(8512代替85.12)的数量的整数。这是为了避免浮点运算的问题。 0.1 + 0.2 == 0.3在JavaScript中返回false,但幸运的是浮点整数运算是精确的,因此可以通过缩放来避免十进制表示错误。

您可能需要检查以下职位关于这一主题延伸阅读:Is JavaScript’s math broken?

您可以随时申请的货币符号格式当值呈现给浏览器。


道格拉斯Crockford的:JavaScript: The Good Parts: Appendix A - Awful Parts (page 105)

+0

已更新您的模式以允许使用否定。 – 2010-03-31 20:51:23

+0

@Peter:感谢您的更新:) – 2010-03-31 20:59:14

+0

感谢您对良好做法的建议。 – Jazzepi 2012-11-04 04:53:37

6

parseFloat()将不起作用,因为您的字符串以非数字(美元符号)开头。

你可以简单地做一个替换删除美元符号,与parseFloat一起获得的价值:

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

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

这个代码用浮漂会将原始字符串。您也可以将它们加载到新变量中。同样,差异不一定要有'$'前置。

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

丹尼尔 - 请问这个gobbledegook意味着什么? /[^0-9\.]+/g,“” – swisstony 2010-04-04 03:17:16

+0

http://www.regular-expressions.info/reference.html – XGreen 2010-04-04 05:01:11