【问题标题】:How can I pass a float arg into a custom EL Function (jsp)?如何将浮点 arg 传递给自定义 EL 函数 (jsp)?
【发布时间】:2013-02-21 12:38:59
【问题描述】:

错误: MyExchangeClass 类型中的方法 exchangeConversion(String, String, float) 不适用于参数 (String, String, double)

jsp 文件中的代码,15.4 和 15.4f 也有错误,但如果更改函数和 TLD 为 double 一切正常。为什么 15.4 和 15.4f 好像是双打一样?

...
From GBP to USD: ${ elfuncs:exchange("GBP", "USD", 15.4f) }
Otherwise: ${ elfuncs:exchange("GBP", "YEN", 15.4) }

顶级域名中的代码

  <function>
    <name>exchange</name>
    <function-class>mypackage.MyExchangeClass</function-class>
    <function-signature>float exchangeConversion(java.lang.String, java.lang.String, float)</function-signature>
  </function>

java类的代码 公共类 MyExchangeClass {

    public static float exchangeConversion(String from, String to, float amount) { 
        float calculatedAmount = 0.0f;

        /* Example implementation code: */
        if(from.equals("GBP") && to.equals("USD")) {
            calculatedAmount = amount*1.5f;
        }
        return calculatedAmount; 
    }
}

【问题讨论】:

    标签: function tags el jsp-tags taglib


    【解决方案1】:

    因为这是在 EL specification 中指定的。浮点文字总是被解释为double

    1.3 字面量

    在 eval 表达式中有布尔值、整数、浮点数、字符串和 null 的字面量。

    ...

    • 浮点 - 由 FloatingPointLiteral 构造定义 第 1.19 节。

    1.19 集合语法

    ...

    • FloatingPointLiteral 的值范围从Double.MIN_VALUEDouble.MAX_VALUE

    只需在您的函数中将float 更改为double

    【讨论】:

    • 所以,就你所说的而言。在 EL 函数中使用 float 作为参数是不可能的,不是吗? ■ 如果A 或B 是包含.、e 或E 的Float、Double 或String: - 如果A 或B 是BigInteger,则将A 和B 都强制为BigDecimal 并应用运算符。 - 否则,将 A 和 B 都强制为 Double 并应用运算符
    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多