2008-08-01 4 views
50

多文化プログラミングの楽しい部分の1つは、数字形式です。アメリカ人は10,000.50 浮動小数点数解析:Catch Allアルゴリズムはありますか?

  • ドイツ人は10 000,50
  • 10.000,50

  • フランス語の使用を使用して私の最初のアプローチは、私が遭遇するまで、文字列を取る後方それを解析することであろう使用

    • 区切り記号を小数点区切り記号として使用します。 10.000は10と解釈されます。

      もう1つの方法:文字列に2つの異なる非数値文字が含まれている場合は、最後のものを小数点の区切り文字として使用し、それ以外は破棄します。私が1つしか持っていない場合は、それが複数回現れているかどうかをチェックし、それがあればそれを破棄します。一度しか表示されない場合は、その後に3桁の数字があるかどうかを確認します。はいの場合は破棄し、それ以外の場合は小数点の区切り記号として使用します。

      明らかに「最善の解決策は、」ユーザーの文化やブラウザを検出することであろうが、あなたはEN-USのWindows /ブラウザを使用してフランス人を持っている場合には動作しません。

      は、.NET Frameworkをい番号のフォーマットを自動検出しようとする中Double.(Try)Parse()よりも優れているいくつかの神秘的な黒魔術浮動小数点パーサが含まれていますか?

  • 答えて

    25

    私はあなたがこのケースでできる最善のが彼らの入力を取り、その後、あなたは、彼らが意図どう思うか、それらを示すことだと思います。彼らが同意しない場合は、あなたが期待しているフォーマットを示して、再びそれを入力させてください。あなたは最大<が1000 *分、あなたは簡単に推測することができ、予想される範囲を指定した場合

    26

    私はこの問題のASP.NET側についてはわかりませんが、.NETにはかなり強力なクラスがあります:System.Globalization.CultureInfo。あなたは二重の値を含む文字列を解析するために、次のコードを使用することができます。

    double d = double.Parse("100.20", CultureInfo.CurrentCulture); 
    // -- OR -- 
    double d = double.Parse("100.20", CultureInfo.CurrentUICulture); 
    

    ASP.NETは何とか(すなわちHTTPリクエストヘッダを使用して)これらの意志、CultureInfo.CurrentCultureまたはCultureInfo.CurrentUICultureのいずれかに現在のユーザーののCultureInfoを通過した場合うまく動作します。

    11

    あなたは誰にでもできません。私が10.000と入力し、誰かが10.000と入力した場合、入力の文化に関する知識がなければ、それを処理することはできません。何らかの形で(ブラウザ、システム設定 - ユースケースは何ですか?ASP?内部アプリ、または世界にオープンですか?)、または期待される書式設定の例を提供し、できるだけ寛大なパーサを使用してください。おそらくのようなもの:

    double d = Double.Parse("5,000.00", NumberStyles.Any, CultureInfo.InvariantCulture); 
    
    9

    フランス語と英語で12.345の間の差は1000倍です。

    たとえば、身長(赤ちゃんと子供を含む)をmmで表します。

    200~3000の範囲を使用すると、1.800または1,800の入力は1メートルと80センチメートルとして明確に解釈できますが、912.300または912,300の入力は91センチメートルと2.3ミリメートルとして明確に解釈できます。

    関連する問題