首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
Enjoy模板引擎的 expr/ast/Compare.java 中的 float 和 double == 比较问题
pizi2019
2019-04-09 17:09
在 expr/ast/Compare.java 和 expr/ast/Logic.java 中都出现了 float、double 值进行 == 和 != 判断,这是 bug,需要修复。
项目:
JFinal
评论区
JFinal
2019-04-09 17:21
enjoy 模板引擎是尽可能遵守 java 规则的, java 规则并不会限定你对 double、float 进行比较,自己的代码要主动避免这两个类型的比较
回复
pizi2019
2019-04-09 17:32
@JFinal
也不能这么说啊,既然 enjoy 提供了浮点数比较,那 enjoy 应该尽可能保证正确性的。
回复
JFinal
2019-04-09 23:15
@pizi2019
java 语言也提供了浮点数比较,例如你试试下面的代码:
public static void main(String[] args) {
float f = 0.1F;
double d = 0.1D;
System.out.println(f);
System.out.println(d);
System.out.println(f == d);
}
从上面的代码可知,java 语言并不保证相等浮点值比较时的正确性,因为计算机底层使用二进制存放数据,且 float、double 所表达的字节长度是有限的,无法精确表达浮点数
由于无法精确表示浮点数,所以对于浮点数大小的比较只能是开发者自己定一个主观标准
例如两个浮点数相减的值小于某个阈值就认为这两个浮点值相等,但这个在逻辑上仍然是主观的,小王可以取这个值为 0.001 , 小李可以取 0.000001
回复
JFinal
2019-04-09 23:17
综上, enjoy 引擎即便要干预浮点值比较,也需要在主观上选定一个域值用于浮点数比较时的判断标准,但这个主观值不同的用户就会不一样,众口难调
最终还是将主动权留给开发者,保持与 java 一样的行为
回复
pizi2019
2019-04-10 09:01
@JFinal
了解,目前我按照我选定的干预浮点值进行了源码修改,呵呵。
回复
pizi2019
2019-04-10 09:02
@JFinal
对了,我看 enjoy发布了3.8,但是没有看到 enjoy 3.8 的 changelog,只看到了 jfinal 3.8 的changelog。
回复
JFinal
2019-04-10 09:33
@pizi2019
enjoy 3.8 主要是同步 jfinal 3.8 来发布, enjoy 3.8 只进行了极少量的代码打磨,用法完全没变过
回复
发送
我要反馈
热门反馈
扫码入社