Валютная математика в 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);