我试图将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));
答案 0 :(得分:0)
如果您将double
编组为float
,则无法指望完全相同的值。
两种数据类型都具有不同的指数和尾数精度。
您可以在MSDN文档中看到精度:
http://msdn.microsoft.com/en-us/library/678hzkk9.aspx
http://msdn.microsoft.com/en-us/library/b1e65aza.aspx
比较和转换浮点数是一个复杂的问题。有关模式的详细信息,请阅读这篇精彩的文章:
为了将双值组合成字节数组,我可以推荐BitConvert.GetBytes(double value)
结构方法。您应该知道此转换是特定于HW的。