2016-02-20 67 views
5

我總字節轉換爲與System.BitConverter.ToDouble()這樣的兩倍:C#字節轉換爲加倍具有「更高」的精度

double value = BitConverter.ToDouble(flt, 0);//flt is an array of bytes. 

但是,當我嘗試轉換「8 一個 7F DA 0℃41 6D A6 40 「(Little Endian),它變成2870.62705118949

實際上,2870.62705118949是「8 E 7F DA 0C 41 6D A6 40」。

但我想要的是2870.6270511894881565。如何使用C#獲得準確的值?

回答

4

當與確切字符串表示下工作,使用 「R」 格式:

https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx

「R」 或 「r」 往返結果:一個字符串,它可以往返一個 相同的數字。

在你的情況

Byte[] data = { 0x8A, 0x7F, 0xDA, 0x0C, 0x41, 0x6D, 0xA6, 0x40 }; 

    Double value = BitConverter.ToDouble(data, 0); 

    Console.Write(value.ToString("R", CultureInfo.InvariantCulture)); // "R" formatting 

正如你所看到的,實際價值不2870.627051189492870.6270511894882;只是比較的值:

2870.6270511894882  Actual 
    2870.6270511894881565 You want to have 
    2870.62705118949  Proposed by changing 8A into 8E 

並看到 「8 7F DA 0C 41 6D A6 40」 是,事實上,是更好的選擇(更準確