我对float字段进行update.前台保存2.11,交给JDBC前print出来也是2.11,存入数据库后变成 2.119999885559082.而通过sql来操作,不会出现这种情况.UPDATE a_item_pipe SET storm_pipe_length = 2.51212出来的结果还是2.51212.说明问题出在JDBC上.我正在研读JTDS的原代码,已经1天了还没搞定,请各位帮忙.
调试欢乐多
/**
* Write a float value to the output stream.
*
* @param f The float value to write.
* @throws IOException
*/
void write(float f) throws IOException {
int l = Float.floatToIntBits(f);
write((byte) l);
write((byte) (l >> 8));
write((byte) (l >> 16));
write((byte) (l >> 24));
}
将float转换成int,然后再转换成byte,过程中肯定会有些精度偏差.上面这段代码太底层了,不懂怎么改.
net.sourceforge.jtds.jdbc.JtdsPreparedStatement.java改成:
setParameter(parameterIndex, new BigDecimal(new Float(x).toString()), java.sql.Types.DECIMAL, 0, 0);谢谢flyxxxxx(灭神)