Проверка моих денег - PullRequest
       23

Проверка моих денег

5 голосов
/ 07 февраля 2012

У меня возникли проблемы с подтверждением ввода денег. Я использовал несколько указателей из других моих вопросов, чтобы написать лучший код. Следующее - то, что я использую, чтобы проверить, действительно ли вход - деньги.

static void Main(string[] args)
{
    string myTest1 = "$1,234.56";
    string myTest2 = "$1.00";
    string myTest3 = "$1000.01";
    string myTest4 = "$1,234,567.89";

    myIsMaybeMoneyValidator Miimv = new myIsMaybeMoneyValidator();

    bool myResult1 = Miimv.isMaybeMoney(myTest1);
    bool myResult2 = Miimv.isMaybeMoney(myTest2);
    bool myResult3 = Miimv.isMaybeMoney(myTest3);
    bool myResult4 = Miimv.isMaybeMoney(myTest4);
}

public bool isMaybeMoney(object theirMaybeMoney)
{
    string myMaybeMoney = theirMaybeMoney.ToString();

    if (myMaybeMoney.StartsWith("-"))
    {
        myMaybeMoney.Remove(0, 1);
    }

    if (!myMaybeMoney.StartsWith("$"))
    {
        return false;
    }

    myMaybeMoney.Remove(0, 1);

    string[] myMaybeMoneyStringArray = myMaybeMoney.Split('.');

    string myMaybeMoneyDollars = myMaybeMoneyStringArray[0];
    string myMaybeMoneyCents = myMaybeMoneyStringArray[1];

    if (!isDollars(myMaybeMoneyDollars))
    {
        return false;
    }

    if (!isCents(myMaybeMoneyCents))
    {
        return false;
    }

    return true;
}

private bool isDollars(string theirMaybeMoneyDollars)
{
    if (!isNumber(theirMaybeMoneyDollars))
        return false;

    try
    {
        int myMaybeDollars = Convert.ToInt32(theirMaybeMoneyDollars);

        if (myMaybeDollars < 1)
            return false;

        return true;
    }
    catch (Exception)
    {
        return false;
    }

    return true;
}

private bool isCents(string theirMaybeMoneyCents)
{
    if (!isNumber(theirMaybeMoneyCents))
        return false;

    try
    {
        int myMaybeCents = Convert.ToInt32(theirMaybeMoneyCents);

        if (myMaybeCents > 99)
            return false;
        if (myMaybeCents < 1)
            return false;

        return true;
    }
    catch (Exception)
    {
        return false;
    }

    return true;
}

private bool isNumber(object theirMaybeNumber)
{
    return Microsoft.VisualBasic.Information.IsNumeric(theirMaybeNumber);
}

Все результаты не деньги, что меня очень смущает.

Ответы [ 3 ]

11 голосов
/ 07 февраля 2012

Похоже, в C # есть встроенная проверка денег.

float num;
bool isValid = float.TryParse(str, 
NumberStyles.Currency,
CultureInfo.GetCultureInfo("en-US"), // cached
out num);

ОТ: https://stackoverflow.com/a/617847/290822

1 голос
/ 07 февраля 2012

Try decimal.TryParse (myTest4, NumberStyles.Currency, новое CultureInfo ("en-US"), out myResult4)

0 голосов
/ 08 февраля 2012

Просто используйте:

float value;
bool isMoney= float.TryParse(str, 
    NumberStyles.Currency,
    CultureInfo.GetCultureInfo("en-US"),
    out value);

Если вы хотите узнать, что не так с вашим кодом, это, вероятно, Microsoft.VisualBasic.Information.IsNumeric (itsMaybeNumber); Не обрабатывает запятые.

...