私は現在、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検証部分と同様に機能するとよいでしょう。また、誰かが数字の間違った文字列表現を入力した場合、バリデーターからの要求を拒否するとよいでしょう。
Double.TryParseを見ましたか? https://msdn.microsoft.com/en-us/library/3s27fasw(v=vs.110).aspx – sr28
@ sr28 'Double.TryParse'では、厳密なフォーマット文字列を指定することはできません。 – modiX
私はそう思っています... "*指定されたスタイル*と文化固有のフォーマットの数字の文字列表現を、それに相当する倍精度浮動小数点数" – sr28