188 Star 767 Fork 170

GVPNutz / nutz

 / 详情

EL表达式浮点数计算精度问题

待办的
缺陷
创建于  
2023-08-23 10:59

涉及到的类如下:
src/org/nutz/el/opt/arithmetic/DivOpt.java
src/org/nutz/el/opt/arithmetic/MulOpt.java

看里面的代码,double类型会直接作乘除法,可不可以考虑用BigDecimal并支持定义scale精度参数呢?
目前EL表达式中“/”会直接对应DivOpt类去处理,如果能支持扩展自定义处理类就最好了,自己去实现里面的逻辑、控制精度。
谢谢!

评论 (2)

wqmain 创建了缺陷

貌似你得手动用BigDecimal来做处理,el表达式处理浮点数的时候是按照java原生的方式来处理的

你说的我明白,目前是按照原生的方式,我是问nutz能提供扩展的实现方式吗?现在我只能通过在自己项目代码中定义 包名+类名完全相同的的DivOpt和MulOpt ,以此来达到复写源码的方式来实现的,这方式有点丑。。。

package org.nutz.el.opt.arithmetic;

import org.nutz.el.opt.TwoTernary;

/**
 * 除
 * @author juqkai(juqkai @ gmail.com)
 */
public class DivOpt extends TwoTernary {

	public int fetchPriority() {
		return 3;
	}

	public Object calculate() {
		Number lval = (Number) calculateItem(this.left);
		Number rval = (Number) calculateItem(this.right);
		if (rval instanceof Double || lval instanceof Double) {
			//自己用BigDecimal处理
		}
		if (rval instanceof Float || lval instanceof Float) {
			//自己用BigDecimal处理
		}
		if (rval instanceof Long || lval instanceof Long) {
			//自己用BigDecimal处理
		}
		//自己用BigDecimal处理
	}

	public String fetchSelf() {
		return "/";
	}

}

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
Java
1
https://gitee.com/nutz/nutz.git
git@gitee.com:nutz/nutz.git
nutz
nutz
nutz

搜索帮助