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