Валютная математика в JavaScript

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

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

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

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

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

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

Ответы

Ответ 1

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, но, к счастью, целочисленная арифметика в плавающей точке является точной, поэтому ошибки с десятичным представлением можно избежать путем масштабирования.

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

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


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

Ответ 2

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

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

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

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

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

Ответ 3

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