2016-05-12 10 views
1

私はC#フォームアプリケーションを持っています。その機能の一部として、double型の値をファイルに文字列形式で書き込みます。そのうちのいくつかはdouble型です.Infinity。C#:Windows 10のConvert.ToDouble( 'Infinity')のフォーマット例外処理

ファイルからこれらの値を読み取り、それらを2重に戻すアプリケーションの別の部分があります。

値の部分をWindows 7で実行し、同じファイルをWindows 10で読み込んだ場合、 '無限大'の変換時にはフォーマット例外が発生します。デフォルトの(us-en)カルチャで使用されているシンボルがWindows 8と10の間で変更されたように見えます。

Convert.ToDouble()のインスタンスは多くあり、try-catchまたはdouble.tryParse()は、多くのプロジェクトで変更を必要とするため、実現可能な解決策ではありません。

この形式の例外の問題を回避するための回避策はありますか?事前に

おかげで、

カピル

+3

まあ、それは時速爆弾でした。唯一の問題ではなく、小数点がカンマで書かれた境界線を越えてプログラムが動くとき、データはぎこちなくなります。 Parse/TryParseオーバーロードを使用するように解析コードを変更したくない場合は、必要に応じてNumberFormat引数を使用します。独自のカルチャでThread.CurrentCultureプロパティを変更する必要があります。好みのNegative/PositiveInfinitySymbol値を使用するカスタムNumberFormatInfoを使用します。 –

+0

ありがとうHans。アプリケーションの初期化中に現在のカルチャがカスタマイズされている場合、予想される無限を一定に設定します。それは働いています。 –

答えて

0

これは、データベースを扱っ、あまりにも他の文化にデータを格納しても大きな問題です。当初、ソフトウェアのスペイン語版は無限大を正しく読み取れず、単語の代わりに無限を記号として保存するという問題がありました。たとえそれを英語文化に強制しようとしていたとしても、それは壊れているように見えました。

英語版のWindows 10では、この問題が解決されました。そこで、無限記号がデータベースに保存されるようになりました。この問題は、Windowsのバージョンや文化間で問題を引き起こす可能性があります。 最も簡単にやるべきことは、ファイルかデータベースかにかかわらず、CultureInfo.InvariantCultureを使用してデータを格納および取得することです。この方法で、それはあなたがそれを期待しているように常になります。

すでにファイル/データベースに問題がある場合は、かなり単純なスクリプトを実行して 'Double |∞'を探し、それを不変型の 'Double | Infinity'に置き換えることができます。 これは将来の問題からあなたを救うでしょう