项目使用的是ssh框架,页面利用.ftl文件进行显示,页面使用freemarker进行取值的时候,原本数字是0.32000,显示的时候变成了
0.31999999,即数字不精确问题。
分析:1:通过hibernate查询数据库,在后台打印数字,显示0.32,即查询数据库是没有问题的。
2:因此我们可以判断是freemarker通过${xxxx}取值出现了bug,原因出在查询数据库用的实体类(entity)上,
为了实体类能够接受null值,把属性都定义成了包装类(Float),问题就是这里,当页面取值的时候,如果属性是
包装类会很麻烦,既不能对数值进行格式化,还可能会出现我遇到的数值不精确问题。
解决办法:为了能接受null值,不能用基本类型(int,float...),只能用包装类,那么不要用Float,可以用Double,还可以用
String,也可以试试其他数值类型的。
备注:如果用了基本类型,当数据库中字段为null时,会报 org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type set...
诸如此类的Exception 。
0.31999999,即数字不精确问题。
分析:1:通过hibernate查询数据库,在后台打印数字,显示0.32,即查询数据库是没有问题的。
2:因此我们可以判断是freemarker通过${xxxx}取值出现了bug,原因出在查询数据库用的实体类(entity)上,
为了实体类能够接受null值,把属性都定义成了包装类(Float),问题就是这里,当页面取值的时候,如果属性是
包装类会很麻烦,既不能对数值进行格式化,还可能会出现我遇到的数值不精确问题。
解决办法:为了能接受null值,不能用基本类型(int,float...),只能用包装类,那么不要用Float,可以用Double,还可以用
String,也可以试试其他数值类型的。
备注:如果用了基本类型,当数据库中字段为null时,会报 org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type set...
诸如此类的Exception 。