2016-02-20 17 views
5

bir "yüksek" hassasiyetle iki katına bayt dönüştürmek:C# Hep bayt böyle <code>System.BitConverter.ToDouble()</code> ile iki katına dönüştürmek

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

Ama "8 A 7F DA 0C 41 6D A6 40 dönüştürmeye çalıştığınızda "(Küçük Endian), 2870.62705118949 olur. 2870.62705118949, "8 E 7F DA 0C 41 6D A6 40", .

Ama benim istediğim 2870.6270511894881565. C# kullanarak doğru değeri nasıl alabilirim?

cevap

4

tam dize gösterimi ile çalışan, kullanın "R" biçimlendirmesi:

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

"R" veya "r" gidiş-dönüş Sonuç: bir dize o can gidiş-dönüş için bir özdeş numarası. Senin durumunda

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 

Ve gördüğünüz gibi de

, gerçek değeri 2870.62705118949 ama 2870.6270511894882 değildir; Sadece karşılaştırma değerleri:

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

ve görmek "8 bir 7F DA 0C 41 6D A6 40", gerçekte, daha iyi bir seçim (daha doğru)