问题描述:项目开发过程中,freemarker中做数值转换发现个奇怪的问题,参数传值${ (summary.clabsQty)?number} 其中 summary.clabsQty传值0.5最后显示0,传值1.5最后显示2,达不到预想的结果!再不断的实验过程中发现${ (summary.clabsQty+1)?number} 可以达到预想结果:传值0.5最后显示1,传值1.5最后显示2,传值0.4显示0
问题根源:上述的四舍五入都是根据一半原则,往最近的符合数字上靠近,即1.4四舍五入 处于1和2之间靠近1最后的值为1.但是1.5和0.5这种,通过上面的例子可以看到都是往偶数上靠的,即0.5处于0和1之间,靠近偶数0,1.5则靠近偶数2
进一步分析问题:summary.clabsQty+1可以达到预期值.如果单从表面很难理解!!!!summary.clabsQty为0.5,加1以后为1.5,四舍五入应该为2,实际结果确为1...这是因为此处的+1并不是数值相加,而是做的字符串拼接!!!! 本质上是0.51做转换.凑巧在有小数的情况下打破了中间值的均衡!!!summary.clabsQty如果一直都是带小数的上述方式不会出现问题.如果是纯整数则直接把值扩了10倍+1.上述方法还是不可取的
问题总结:不建议做前端的四舍五入,最后后端处理好直接展示!!