簡體   English   中英

我如何將格式為“1.123”和“1,123”的字符串值轉換為單倍double.TryParse?

[英]How i can convert string values in formats “1.123” and “1,123” to double by single double.TryParse?

我有一個傳入的字符串值源代表雙重值“。” 和“,”分隔符和我的程序將在具有不同分隔符設置的PC上運行(“,”或“,”)
我可以用單行轉換它而不先嘗試轉換“。”,然后如果失敗,請嘗試“,”?
我試過這樣的組合:

    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);

但轉換的嘗試之一總是失敗。
如果很快告訴它,我需要一個通用函數來轉換“。” 或“,”將雙值分隔為double

那么,現在的文化告訴你是否. ,是小數點分隔符。 如果希望函數解析兩種格式,則需要傳入具有相應分隔符的區域性。 在你的例子中:

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;
}

最簡單的方法是將','替換為'。' 並使用不變的文化設置解析結果:

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

唯一的限制是您不應該在您的號碼中進行分組(如123,000.45)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM