2016-06-14 70 views
0

我有一個字符串,"999999999999.999"。我想將它轉換爲double。我嘗試了很多東西,但總是給我返回錯誤的數字。ToDouble返回錯誤號碼

我想:

Math.Truncate(Convert.ToDouble("999999999999.999") * 1000)/1000; 

它返回我:99999999999.99902

只有Convert.ToDouble("999999999999.999")返回我一樣。

02部分是錯誤的部分。

如何將字符串"999999999999.999"轉換爲double而不會損失精度或準確性?

+0

它返回我99999999999.99902但我需要999999999999.999 – Curious

+0

它總是隻有三位小數? –

+0

是的,我需要最多三位十進制數字 – Curious

回答

-1

嘗試:

double aux = double.Parse("999999999999.999") * 1000/1000; 
double result = Math.Round(aux, 3); 
+1

這不是C#,它不編譯。 – spender

+0

不得不打開VS,看看有什麼問題哈哈哈,現在自己對其進行測試 – Oleg

+1

最接近999999999999.999的64位IEEE 754二進制浮點數爲999999999999.9990234375。乘法,除法或舍入的數量可以接近。 –

3

如果你想確切的精度將其轉換爲十進制

雖然轉換爲加倍會有一個精度損失

0

鑑於附加信息不會有超過小數點前12位數字和後3位數字,double應該精確到足以區分所有可以存儲的數字。

例如,最大數字由999999999999.9990234375表示,它比999999999999.999更接近於任何其他三位小數位數。

您將需要控制格式,以便您四捨五入到最接近的3位小數位數。

如果您進行任何計算,則應將其轉換爲小數點後舍入到小數點後3位,以避免累積舍入誤差。