如何在C#中指定特定的double
精度文字或值?
例如,我想在程序中使用最大double
值小于1的常数。小于1的最大double
是二进制形式的1.11111111 11111111 11111111 11111111 11111111 11111111 1111 x 2^(-1)
。将其表示为十六进制的big-endian将是0x3fe f ffff ffff ffff
我可以使用以下代码生成它:
var largestDoubleLessThanOneBytes = new byte[] {0x3f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
if (BitConverter.IsLittleEndian) largestDoubleLessThanOneBytes = largestDoubleLessThanOneBytes.Reverse().ToArray();
double largestDoubleLessThanOne = BitConverter.ToDouble(largestDoubleLessThanOneBytes, 0);
BitConverter
不能用于const
的声明中,因此不能代替文字值。使用this tool,我可以得出文字
9.99999999999999888977697537484E-1
,它最终是完全相同的double。 BitConverter.ToString(BitConverter.GetBytes(9.99999999999999888977697537484E-1)) == "FF-FF-FF-FF-FF-FF-EF-3F"
。除了找到十进制文字(其最接近的双精度表示形式是您想要的双精度形式)之外,还有什么其他方法可以将特定的
double
值转换为c#代码? 最佳答案
这可能是矫kill过正,但该死,为什么不呢?
unsafe
{
var x = 0x3fefffffffffffff;
var d = *(double*)&x;
Console.WriteLine("{0:r}", d);
}
您好,C#中的
reinterpret_cast<>