0

我有一个用 C# 编写的 Windows 窗体应用程序。

我正在寻找一种方法来验证我的价格文本框,以便它只接受双重格式的价格,例如允许 0.01 和 1200.00 但在用户输入字符时提供错误。

我会除了代码看起来类似于

String price = tbx_price.Text.Trim();

if price is not a number
{
   error message
}
else{
...

我可以使用什么方法来检查价格字符串是否只包含数字?请注意,我要求用户能够使用小数位,因此“。” 应该允许字符。

4

3 回答 3

7

使用decimal.TryParse

decimal d;
if (!decimal.TryParse(price, out d)){
    //Error
}

如果您还想验证价格145.255无效):

if (!(decimal.TryParse(price, out d) 
           && d >= 0 
           && d * 100 == Math.Floor(d*100)){
    //Error
}
于 2013-05-23T15:49:41.697 回答
4

您可以使用decimal.TryParse().

例如:

decimal priceDecimal;
bool validPrice = decimal.TryParse(price, out priceDecimal);

如果您不能确定线程文化与用户的文化相同,请改用TryParse()接受文化格式的重载(也可以设置为货币的数字格式):

public bool ValidateCurrency(string price, string cultureCode)
{
    decimal test;
    return decimal.TryParse
       (price, NumberStyles.Currency, new CultureInfo(cultureCode), out test);
}

if (!ValidateCurrency(price, "en-GB"))
{
    //error
}
于 2013-05-23T15:50:16.433 回答
0

除了使用标记为已接受的答案以避免价格文化问题外,您始终可以使用此

Convert.ToDouble(txtPrice.Text.Replace(".", ","));
Convert.ToDouble(txtPrice.Text.Replace(",", "."));

这将取决于您如何在应用中管理转换。

PS:我无法评论答案,因为我还没有必要的声誉。

于 2014-05-08T19:17:00.737 回答