如何解析字符串并根据格式字符串将其转换为double?

时间:2016-09-06 11:58:24

标签: c# parsing double

我正在构建一个自定义验证控件,我尝试在类似于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 stringcustom 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验证部分类似,这将是很棒的。此外,如果有人输入错误的数字字符串表示,最好拒绝验证者的请求。

1 个答案:

答案 0 :(得分:0)

抱歉,我没有正确复制代码......我认为这会处理你提到的三个案例......

string input = "12.00";

double validationCheck = Convert.ToDouble(input);

string validationCheck1 = validationCheck.ToString("0.00",  CultureInfo.InvariantCulture);

if (input!=validationCheck1) /* Validation Failed */ ;

您还需要检查例外情况。