gpt4 book ai didi

java - JSP中的表达式语言: Arithmetic Operator Division

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:14 25 4
gpt4 key购买 nike

我需要有关 JSP 中以下 EL 代码段的说明

$ {5/x} : ${5/x}
$ {10/0} : ${10/0}
$ {5/2} : ${5/2}
$ {x/10} : ${x/10}
$ {5 div null} : ${5 div null}
$ {x/x} : ${x/x}
$ {0/0} : ${0/0}
$ {x/null} : ${x/null}
$ {null div x} : ${null div x}
$ {null/null} : ${null/null}

上面jsp的输出是

$ {5/x} : Infinity
$ {10/0} : Infinity
$ {5/2} : 2.5
$ {x/10} : 0.0
$ {5 div null} : Infinity
$ {x/x} : 0
$ {0/0} : NaN
$ {x/null} : 0
$ {null div x} : 0
$ {null/null} : 0

我读到,EL 在处理空值或任何不在任何范围内的对象方面足够智能。此外,EL 中的除法运算符遵循浮点运算。

对于在任何作用域中找不到的任何变量或 null 关键字,EL 会在其中放置值 0。如果是这样,为什么 ${x/x}、${x/null}、${null div x} 和 ${null/null} 结果为 0?我的猜测是,它应该是 NaN,就像 ${0/0} 的情况一样。 (因为,空或不可用变量为“0”)

注意:在上面的代码片段中,x 是一个在任何范围内都不可用的变量。

请帮助我理解这种行为。

谢谢!

最佳答案

JavaHopper 和其他所有人,大家好。

我想,我找到了解决方案。

我的设置:

  • NetBeans 8.2(内部版本 201609300101)
  • Java EE6
  • Apache Tomcat 8.0.27.0

  • tomcat-jasper-8.0.0-rc1-sources.jar

从此页面:http://www.java2s.com/Code/Jar/t/Downloadtomcatjasper800rc1sourcesjar.htm

用于调试。

正如您所说,如果两个操作数都是“null”,那么您将得到0 结果。

如果我让它调试,它会调用一个名为的方法:

public static final Number divide(final Object obj0, final Object obj1)

可以在这里找到:

org.apache.el.lang.ELArithmetic.divide(obj0, obj1)

这是完整的方法:

public static final Number divide(final Object obj0, final Object obj1) {
if (obj0 == null && obj1 == null) {
return ZERO;
}

final ELArithmetic delegate;
if (BIGDECIMAL.matches(obj0, obj1))
delegate = BIGDECIMAL;
else if (BIGINTEGER.matches(obj0, obj1))
delegate = BIGDECIMAL;
else
delegate = DOUBLE;

Number num0 = delegate.coerce(obj0);
Number num1 = delegate.coerce(obj1);

return delegate.divide(num0, num1);
}

正如您在方法开头所看到的,它们是一个检查,如果两个操作数都为 null

如果是,您将得到 0(零) 返回,并将在您的 JSP 站点上显示为字符串。

所以这与数学规则没有太大关系。

希望这能有点帮助。

致以诚挚的问候

rikku47

附注:

简而言之,您只需调用:

org.apache.el.lang.ELArithmetic.divide(null, null);

关于java - JSP中的表达式语言: Arithmetic Operator Division,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com