验证双精度/小数是否为货币C#

时间:2010-12-27 22:49:20

标签: c#

我在管道分隔文件中读取并且需要检查列是否是有效货币(即它必须遵循xxxxx.xx格式,因此小数点后最多两位数,尽管没有必要小数点后的任何数字)。我将如何在C#中执行此操作?

3 个答案:

答案 0 :(得分:6)

尝试将您的值转换为货币,如下所示:

double dummy;
bool valid = double.TryParse(value, NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"), out dummy);
如果TryParse可以将其解析为货币,则

valid将为真。到目前为止,这是比使用正则表达式更好的选择。

要获取值的小数(小数),只需将其转换为int并从原始值中减去它,如:

double fraction = value - (int)value;
然后

fraction将包含小数,您可以随意使用它们。

答案 1 :(得分:1)

您可以使用正则表达式:

using System.Text.RegularExpressions;

if (Regex.IsMatch(myString, @"\d+(\.\d{1,2})?"))
{
    // ...
}

或使用decimal.TryParse()如果您只想检查是否可以将其转换为小数:

decimal value;
if (decimal.TryParse(myString, out value))
{
    // Do something with value
}

答案 2 :(得分:0)

看起来有点hacky,但有趣的方法是确保你解析钱是正确的:

浮动金额= float.TryParse(“$ 1,200,000.34”,NumberStyles.Currency);

bool fractionLooksFine =(new System.Version((amount * 100).ToString())。Minor == 0);