freemarker的数字不精确问题

本文探讨了在SSH框架下,使用Freemarker模板语言从数据库查询结果中获取浮点数时出现的不精确问题。通过分析实体类的设计,发现使用包装类(如Double)而非基本类型(如int,float)可以解决此问题,同时避免了数据库字段为null时引发的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目使用的是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 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值