Для типа данных Java float
Spring JDBC ведет себя иначе, чем прямой JDBC.
Рассмотрим оператор SQL INSERT INTO table (field) VALUES (-0.11111111)
с field
тип Oracle NUMBER
и -0.11111111 типа float.
С прямым JDBC он дает значение field
как есть,т.е. -0.11111111.
Но в Spring JDBC (при использовании JdbcTemplate.update()
он дает значение field
с добавлением чисел, т. Е. -0.1111111119389534.
Такой разницы нет для типа Java double
.вставленное значение не дополняется числами.
С типом данных Java BigDecimal
вставленное значение в БД также будет дополнено числами, то есть -0.1111111099999999990428634077943570446223, и это совместимо как для прямого JDBC, так и Spring JDBC.
Результаты для float
понятны, поскольку Java заявляет в своей документации, что «тип данных (Float) никогда не должен использоваться для точных значений, таких как валюта». Таким образом, даже если поведение в прямых JDBC и Spring различноJDBC, мы не можем сказать, что это неправильно.
Для BigDecimal
читать http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal%28double%29