【问题标题】:Validating my money验证我的钱
【发布时间】:2012-02-07 19:51:21
【问题描述】:

我在验证资金输入时遇到了一些问题。我使用了其他问题中的一些指针来编写更好的代码。以下是我用来验证输入是否是钱的内容。

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);
}

结果都不是钱,这让我很困惑。

【问题讨论】:

  • 什么是myIsMaybeMoneyValidator?它是在哪里定义的?
  • 等待正则表达式解决方案...还有为什么你不使用正则表达式我敢打赌有很多很好的例子来换取美元。
  • 你需要学习正则表达式
  • 我撤回了我之前的声明,似乎 C# 有一个内置的货币函数,为什么在 C# 已经处理它时使用凌乱的正则表达式
  • RegEx 可能是这里的解决方案。stackoverflow.com/questions/617826/…

标签: c# validation numbers currency


【解决方案1】:

看起来在 C# 中有一个内置的金钱验证。

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

来自: https://stackoverflow.com/a/617847/290822

【讨论】:

    【解决方案2】:

    试试 decimal.TryParse(myTest4, NumberStyles.Currency, new CultureInfo("en-US"), out myResult4)

    【讨论】:

      【解决方案3】:

      只需使用:

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

      如果您想知道您的代码有什么问题,可能是 Microsoft.VisualBasic.Information.IsNumeric(theirMaybeNumber); 没有处理逗号。

      【讨论】:

      • 如果 Expression 包含以 + 或 - 字符开头或包含逗号的有效数字表达式,IsNumeric 也会返回 True。
      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2022-07-28
      • 2013-10-23
      • 2021-03-17
      • 1970-01-01
      • 2014-12-12
      • 2014-04-13
      相关资源
      最近更新 更多