![](/img/trans.png)
[英]How to use Double.TryParse Method (String, NumberStyles, IFormatProvider, Double)
[英]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.