2017-10-05 73 views
2

我很奇怪,爲什麼這是工作:差異相關與InvariantCulture的

doubleValue = double.Parse(input[0].ToString(System.Globalization.CultureInfo.InvariantCulture).Replace(',', '.'), System.Globalization.CultureInfo.InvariantCulture); 

雖然這不是:

doubleValue = Convert.ToDouble(input[0]) 

的一點是,有一個國家約30臺機器(相同的Windows映像,相同的硬件,不同的位置)。雖然前20臺機器可以使用Convert.ToDouble(),但其他10臺機器無法正確轉換數值(它們在每種情況下都會丟失小數點,無論點或逗號如何)。

由於程序真的很複雜,有沒有機會讓Convert.ToDouble()工作而不改變程序本身?

的另一點是,我嘗試了不同的方法來我的字符串值轉換爲雙,他們都不工作,但只有double.Parse() ...

而且也,是一般不好用Convert.ToDouble() VOR字符串? (僅適用對象)

編輯:

我創造了這個方法,我的類中:

public static double ToDouble(string value, IFormatProvider provider) 
{ 
    if (value == null) 
    { 
     return 0.0; 
    } 

    return double.Parse(value, NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent, provider); 
} 

,並把它稱爲(試過也點和逗號):

doubleValue = ToDouble(myTextBox.Text, CultureInfo.InvariantCulture); 

結果:仍然不工作...

+1

「我試過不同的方法......」包括Convert.ToDouble(text,CultureInfo.InvariantCulture)'? –

+0

您可以更改程序或控制其他10臺PC的區域設置。 –

+0

是啊,我試過這個例子:'doubleValue = Convert.ToDouble(myTextBox.Text.Replace('。',','),System.Globalization.CultureInfo.InvariantCulture);'。此外,它是否指向逗號或其他方式無關緊要... – Essigwurst

回答

3

As我還記得,Convert.ToDouble()看起來像這樣:

// System.Convert 
public static double ToDouble(string value) 
{ 
    if (value == null) 
    { 
     return 0.0; 
    } 
    return double.Parse(value, CultureInfo.CurrentCulture); 
} 

正如你所看到的,在內部調用double.Parse()方法,用CurrentCulture。所以如果你有一個字符串,並且你期望它總是雙倍的,那麼使用double.Parse()和你喜歡的文化。

P.S. Yeap,我是對的,你可以在ILSpy看mscorlib.dll

P.P.S我忘了ReferenceSource資源,所以你可以找到同樣的東西Here

+0

請找到我編輯的帖子。仍然不知道爲什麼這不起作用.. – Essigwurst

0

Convert.ToDouble使用當前的線程文化,所以你不能明確指定你想投的文化。

鑑於double.Parse爲您提供了一個重載指定要分析的文化,這就是爲什麼Convert.ToDouble不適用於某些機器的原因。

+0

是否有可能「同步」我的機器上的文化?重點是,它來自同一個窗口圖像......另外,請參閱我在問題中的評論... – Essigwurst

+0

我不認爲可以同步所有機器的文化,除非您手動執行它們,但無論如何,我希望你使用的是double.Parse(str,new CultureInfo(「yourCulture」));因爲您將始終知道所需的數據將採用哪種格式,並且您可以輕鬆進行格式化。 –