【问题标题】:TryParse failing with currency string type for parameterTryParse 因参数的货币字符串类型而失败
【发布时间】:2013-03-13 19:30:40
【问题描述】:

我的表单有一个包含数量数字的文本框。然后在 textchanged 事件中,该数字被放置在带有货币值的标签的文本属性中(例如:4.00 美元)。在我的按钮单击事件中,我试图添加标签中的所有值。当使用以下代码时,tryparse 每次都会失败

int num1;
string text = lbl85x11bwsub.Text;
if (int.TryParse(text, out num1)) 
{
     MessageBox.Show(num1.ToString()); //testing
}
else
{
      MessageBox.Show("it failed");
}

但如果我使用文本框的文本属性尝试相同的操作,它会起作用。

int num2;
if (int.TryParse(txt85x11bw.Text, out num2)) 
{
     MessageBox.Show(num2.ToString());
}
else
{
      MessageBox.Show("it failed");
 }

【问题讨论】:

  • 抱歉,您确定lbl85x11bwsub.Text 包含有效的整数(字符串)吗?
  • 在第二个代码中,您从 txt 中获取字符串,而不是从 lbl。
  • 你刚才说标签包含“$”字符..不能转换为int。
  • @scartag: 字符串4.00 也不能和int.TryParse...
  • @AustinSalonen 是的 .. 愚蠢的我......我看到了“$”字符并立即停止处理:)

标签: c# winforms


【解决方案1】:

@Frederik Gheysels 为您的问题提供了几乎完整的答案,除了一件小事。在这种情况下,您应该使用 NumberStyles.Currency 因为您的数字不仅可以不是整数,还可以包含千位和小数分隔符。而 NumberStyles.AllowCurrencySymbol 只会关心货币符号。另一方面 NumberStyles.Currency is a composite number style. 可以允许几乎所有其他分隔符。

所以,这个表达式可能会起作用:

Decimal.TryParse(text, 
    NumberStyles.Currency, 
    CultureInfo.CurrentCulture, 
    out result);

【讨论】:

    【解决方案2】:

    试试

    Decimal.TryParse(text, 
        NumberStyles.Currency, 
        CultureInfo.CurrentCulture, 
        out result);
    

    相反。 您要解析的数字是:

    • 不是整数
    • 包含货币符号

    【讨论】:

    • 当您从字符串中省略货币符号时会发生什么?您确定字符串中存在的货币符号是您的文化设置中定义的实际货币符号吗? ...(调试 101)
    【解决方案3】:

    使用NumberStyles.Currency 而不是NumberStyles.AllowCurrencySymbol

    How to parse string to decimal with currency symbol?

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      相关资源
      最近更新 更多