我正在构建一个自定义验证控件,我尝试在类似于DateTime.ParseExact
函数的双精度中解析一个数字的字符串。
以下是我尝试存档的内容:
Console.WriteLine(Double.ParseExact("12.00", "0.00", CultureInfo.InvariantCulture).ToString()); // should print "12"
Console.WriteLine(Double.ParseExact("asd", "0.00", CultureInfo.InvariantCulture).ToString()); // should throw FormatException
Console.WriteLine(Double.ParseExact("12.000", "0.00", CultureInfo.InvariantCulture).ToString()); // should throw FormatException, because it has to many decimal digits
我知道我可以简单地解析它没有格式字符串,但我想在这里应用一些更严格的规则。格式字符串可以是standard format string或custom format string,因此它可以是不同的。
当然,上述方法不存在。以下是DateTime
类中的现有方法,它使用DateTime
s进行相同的操作:
DateTime.ParseExact("2016-09-06T11:57:55.335", "yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
我如何为Double
做同样的事情?
顺便说一句......
原因是我正在构建一个自定义的asp.net webforms RangeValidator
我继承自BaseValidator
。我想让此控件与DateTime
兼容,并且必须使用自定义格式字符串并使用InvariantCulture
使其与新的HTML5控件完全兼容([type=numeric]
和[type=datetime]
)。
控件的数字验证部分与DateTime验证部分类似,这将是很棒的。此外,如果有人输入错误的数字字符串表示,最好拒绝验证者的请求。
答案 0 :(得分:0)
抱歉,我没有正确复制代码......我认为这会处理你提到的三个案例......
string input = "12.00";
double validationCheck = Convert.ToDouble(input);
string validationCheck1 = validationCheck.ToString("0.00", CultureInfo.InvariantCulture);
if (input!=validationCheck1) /* Validation Failed */ ;
您还需要检查例外情况。