Код для разбора долларов и центов?


Я написал код для парсинга долларах и центах, введенные пользователем. Возвращаемое значение-это общее количество центов.

Например:

f('$1.50') = 150

f('1.5') = 150

f('0') = 0

f('1000') = 1000

f('$12,500.00') = 12500000

functions.GetTotalCents = function (dollarsAndCentsString) {
    // Cast the value passed in to a string in case a number was passed in.
    dollarsAndCentsString = dollarsAndCentsString.toString();
    // First, discard the '$' glyph, if it was passed in.
    if (dollarsAndCentsString.split('$').length == 2)
        dollarsAndCentsString = dollarsAndCentsString.split('$')[1];
    // If the user delimmited the groups of digits with commas, remove them.
    dollarsAndCentsString = dollarsAndCentsString.replace(/,/g, '');
    // Next, divide the resulting string in to dollars and cents.
    var hasDecimal = (dollarsAndCentsString.split('.')).length == 2;
    var dollarsString, centsString;
    dollarsString = dollarsAndCentsString.split('.')[0];
    var centsString = hasDecimal ? dollarsAndCentsString.split('.')[1] : '0';
    var dollars = parseInt(dollarsString, 10);
    var cents;
    if (centsString.length == 1)
        cents = parseInt(centsString, 10) * 10;
    else cents = parseInt(centsString, 10);
    if (cents > 99 || isNaN(cents) || isNaN(dollars) || !isFinite(dollars) || !isFinite(cents))
        return 0;
    var totalCents = dollars * 100 + cents;
    return totalCents;
};

Кто будет критиковать мой код?



Комментарии
1 ответ

Разве не было бы проще:


  • вырезать любой '$' и ',' персонажи;

  • преобразовать в вещественное число;

  • умножить на 100;

  • взять целую часть.

Вы, наверное, можете сделать это в одну строку (мой JavaScript-это немного ржавый):

return Math.round(100 * parseFloat(dollarsAndCentsString.replace(/[$,]/g, '')));

Сказав это, я думаю, что ваш Ф('1000') пример это, наверное, неправильно: моя интуиция говорит, что я должна интерпретировать '1000' в долларах, а не центах.

8
ответ дан 18 июля 2011 в 11:07 Источник Поделиться