Валюта математика в JavaScript - PullRequest
14 голосов
/ 01 апреля 2010

Может кто-нибудь помочь мне с решением JavaScript / jQuery для этой арифметической задачи:

Мне нужно вычесть одно число из другого.

Проблема в том, что числа имеют знак доллара (потому что это деньги), поэтому jQuery рассматривает их как строки, а не числа.

Я создал две переменные - toalAssets и totalLiabilites. Я хотел бы вычесть последнее из первого и поместить результат в другую переменную с именем netWorth.

Возможно, мне нужно использовать parseFloat()?

Но я не уверен, как ... Это все над моей головой!

Ответы [ 3 ]

29 голосов
/ 01 апреля 2010
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 рекомендуется 1 обрабатывать деньги как целое число, представляющее количество центов (8512 вместо 85,12). Это позволяет избежать проблем с арифметикой с плавающей точкой. 0.1 + 0.2 == 0.3 возвращает false в JavaScript, но, к счастью, целочисленная арифметика в плавающей точке является точной, поэтому путем масштабирования можно избежать ошибок десятичного представления.

Вы можете проверить следующий пост для дальнейшего чтения по этой теме: Не работает ли математика JavaScript?

Вы всегда можете применить форматирование со знаком валюты, когда значения отображаются в браузере.


1 Дуглас Крокфорд: JavaScript: Хорошие части: Приложение A - Ужасные части (стр. 105) .

6 голосов
/ 01 апреля 2010

parseFloat() не будет работать, потому что ваша строка начинается с не числа, знака доллара.

Вы можете просто сделать замену, чтобы удалить знак доллара, вместе с parseFloat, чтобы получить значение:

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

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

Этот код заменяет ваши исходные строки на плавающие. Вы также можете загрузить их в новые переменные. Аналогично, разница не обязательно должна начинаться с '$'.

1 голос
/ 01 апреля 2010
var a = "$20";
var b = "$34";
var c = parseFloat(a.replace(/[^0-9\.]+/g, "")) - parseFloat(b.replace(/[^0-9\.]+/g, ""));
alert(c);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...