1

"." で double 値を表す文字列値の入力ソースがあります。および「、」区切り文字と私のプログラムは、区切り文字(「、」または「、」)の設定が異なるPCで実行されます
。最初に「。」を変換せずに1行で変換するにはどうすればよいですか"?
私はそのようないくつかの組み合わせを試しました:

    string dot_val = "1.12";
    string non_dot_val = "1,12";

    double dot_double = 0, non_dot_double = 0;

    bool dot_res = double.TryParse(dot_val, NumberStyles.Any, CultureInfo.CurrentCulture, out dot_double);
    bool non_dot_res = double.TryParse(non_dot_val, NumberStyles.Number | NumberStyles.AllowCurrencySymbol, CultureInfo.CurrentCulture, out non_dot_double);

しかし、変換の試みの 1 つは常に失敗します。
簡単に言えば、「。」を変換するユニバーサル関数が必要です。または "," で区切られた double 値を double に

4

2 に答える 2

2

さて、現在のカルチャは、小数点記号が.またはであるかどうかを示します。,関数で両方の形式を解析する場合は、それぞれの区切り記号を持つカルチャを渡す必要があります。あなたの例では:

public double UniveralParse(string value)
{
    double result;

    // If we can not parse the "." format...
    if (!double.TryParse(value, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out result))
        // And also can not parse the "," format...
        if (!double.TryParse(value, NumberStyles.Any, CultureInfo.GetCultureInfo("de-DE"), out result))
            // we throw an exception
            throw new ArgumentException("value is not in expected format!");

    // Otherwise we can return the value
    return result;
}
于 2013-02-07T09:38:29.963 に答える
1

最も簡単な方法は、「,」を「.」に置き換えることです。インバリアント カルチャ設定を使用して結果を解析します。

double.TryParse(
          dot_val.Replace(',','.'), 
          NumberStyles.Any, 
          CultureInfo.InvariantCulture, 
          out dot_double);

これの唯一の制限は、番号にグループ化を含めないことです (123,000.45 など)。

于 2013-02-07T09:39:39.400 に答える