2016-09-06 34 views
0

私は現在、DateTime.ParseExact関数のような倍精度の数値の文字列を解析しようとするカスタム検証コントロールを構築しています。文字列を解析し、フォーマット文字列に基づいて文字列をdoubleに変換するにはどうすればよいですか?

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秒で:

DateTime.ParseExact("2016-09-06T11:57:55.335", "yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); 

私はDoubleのために同じことを行うことができますどのように?ところで


...

その理由は、私は私がBaseValidatorから継承したカスタムasp.netのWebフォームRangeValidatorを構築しています。このコントロールをDateTimeと互換性を持たせたいと思います。カスタムフォーマット文字列を使用し、InvariantCultureを使用して新しいHTML5コントロール([type=numeric][type=datetime])と完全に互換性を持たせてください。

コントロールの数値検証部分は、DateTime検証部分と同様に機能するとよいでしょう。また、誰かが数字の間違った文字列表現を入力した場合、バリデーターからの要求を拒否するとよいでしょう。

+0

Double.TryParseを見ましたか? https://msdn.microsoft.com/en-us/library/3s27fasw(v=vs.110).aspx – sr28

+0

@ sr28 'Double.TryParse'では、厳密なフォーマット文字列を指定することはできません。 – modiX

+0

私はそう思っています... "*指定されたスタイル*と文化固有のフォーマットの数字の文字列表現を、それに相当する倍精度浮動小数点数" – sr28

答えて

0

申し訳ありませんが、私が正しくコードをコピーしませんでした...私は、これはあなたが言及した3例を扱いだと思う...

string input = "12.00"; 

double validationCheck = Convert.ToDouble(input); 

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

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

ます。また、例外をチェックする必要があります。

+0

"に変換します。 –

関連する問題