编组浮动值

时间:2014-03-11 11:07:11

标签: c# marshalling

我试图将double值作为float格式化为字节数组。结果是从执行动态查询到达的,结果集中的值是0.9879764356807但在我编组之后,值变为0.9879764356806。它也没有发生在每一个价值上,我也没有看到任何这种精确度的模式。

除了元帅以外还有什么能以正确的方式给我价值吗?

doubleData = new byte[8];
MarshallFloatUtils.marshallFloatIntoBuffer(rs.getDouble(Index),
doubleData, 0, true, MarshallFloatUtils.FLOAT_FORMAT_IBM_390_HEX, 8);
resultRow.append(new String(doubleData));

1 个答案:

答案 0 :(得分:0)

如果您将double编组为float,则无法指望完全相同的值。 两种数据类型都具有不同的指数和尾数精度。 您可以在MSDN文档中看到精度:

http://msdn.microsoft.com/en-us/library/678hzkk9.aspx

http://msdn.microsoft.com/en-us/library/b1e65aza.aspx

比较和转换浮点数是一个复杂的问题。有关模式的详细信息,请阅读这篇精彩的文章:

http://blogs.msdn.com/b/clrcodegeneration/archive/2013/10/28/floating-point-a-dark-amp-scary-corner.aspx

为了将双值组合成字节数组,我可以推荐BitConvert.GetBytes(double value)结构方法。您应该知道此转换是特定于HW的。