2010-03-31 41 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