2020-03-25 16:49
@himans 我现在想对这个地方进行改进,现在有两个方案,看你那里希望选择哪一个?
方案一:
提供一个 setBigDecimalDivideMinScale(int) 方法用来配置 BigDecimal 除法的最小 scale,默认值为 5
然后代码这样用:
int scale = Math.max(bigDecimalDivideMinScale, (bd[0]).scale());
(bd[0]).divide(bd[1], scale, RoundingMode.HALF_EVEN);
也就是说 scale 取值为被除数的 scale 与配置值取最大值
方案二:
取被除数与除数中最大的 scale 值:
int scale = Math.max((bd[0]).scale(), (bd[1]).scale());
(bd[0]).divide(bd[1], scale, RoundingMode.HALF_EVEN);
结合你的应用场景,你觉得哪种方案最好?
在你的当前场景之外,你觉得哪个方案更好?
2020-03-25 16:42
@jiahaokkk jfinal 3.5 这个版本太旧了, 建议升级到 jfinal 4.8, 这里有详细的升级文档:
https://jfinal.com/doc/14-1
2020-03-25 16:41
@jiahaokkk jfinal 开源 8 年多,迭代 9 年多, 大量开发者天天在用, 社区需要对用户负责
2020-03-25 12:43
@Code_Cat hash 出来的东西,如果还能再解密,那就没有什么意义了
hash 与加密完全是两回事, hash 的目的就是为了不能还原,也就是不能被解密
只有这样,你在腾迅、百度、jfinal.com 上注册时经过 hash 后的密码,才无法被反向解密,只能正向碰撞式破解。如果你的密码足够复杂则可以认为是无法破解
想知道 hash 的具体用法,加入 jfinal 俱乐部,获取本网站的源码,里头的注册、登录就是 HashKit 的完美实践:
http://jfinal.com/club
2020-03-25 12:24
configEngine(Engine me) 中不建议配置:
me.setBaseTemplatePath(...);
因为这个配置是留给非 web 环境以及 me.setToClassPathSourceFactory() 两种情况下使用的:
https://jfinal.com/doc/6-11
你希望配置的这个 "_view" 值,完全可以在 configRoute(Routes routes) 中通过下面的方法配置:
routes.setBaseViewPath("/_view");
注意,如果 Routes 被拆分过,要在各自的 routes 中都配置一次:
setBaseViewPath("/_view");
2020-03-25 12:19
@himans 我估计你用的是 oracle,所以从数据库查出来直接就是 BigDecimal 类型
当前的 enjoy 不支持定制 Arith.java 的行为,当前可能最好的办法是你在后台通过 java 代码先计算出这个值,然后 html 中输出一下:
BigDecimal budget = sum.getBigDecimal("budget");
BigDecimal expense = sum.getBigDecimal("expense");
BigDecimal percent = budget.divide(expense, 这里用上自己实际需要的参数);
// 这里将 percent 再放回 record 对象中,便于在 html 中输出
sum.set("percent", percent);
html 中的输出方式:
#number(sum.percent, "#.##%")
注意上面第三行代码中的 divide 方法,可以指定 scale 与舍入方式,例如:
budget.divide(expense, 4, RoundingMode.HALF_UP);
以上 divide 中的 4 可以保留四位小数, RoundingMode.HALF_UP 即为四舍五入
2020-03-24 21:22
@小风yy 抛异常的原因是:
1:Db.find(Db.getSql("demo.customer")); 查出来的字段是实时的,也就是说你添加了字段 remark1 以后,上面的代码再执行时,会获取到 remark1 这个字段的值
2:ActiveRecordPlugin 在启动时,会对所有映射的 Model 进行初始化,这个过程会从数据库获取字段名
3:出于安全性考虑,Model._setAttrs(...) 这个方法会检测放入的字段是否存在,而这时使用的字段是前面第二步在启动时初始化决定的
4:由于添加了 remark1 这个字段, Model._setAttrs 检测时发现这个字段在内存中不存在,抛出异常
知道了原理,根据情况解决一下。
其实我在前面的回复中已经给出了几种解决办法,就看你用不用
2020-03-24 20:30
@小风yy 添加字段就是动态改变数据表结构
你的项目正在运行中,但你为表添加了字段,不抛异常才是错的