为什么JSTL parseNumber会把1000.0解析成10000?

Why does JSTL parseNumber parse 1000.0 to 10000?

我有一个输入表单,我想在其中插入一些数字并计算一些结果。所以我的输入字段看起来像

<fmt:parseNumber var = "a" type = "number" 
    value = "${object.someAttribute}" integerOnly = "true"/>

<input type="number" name="someAttribute" required pattern="[0-9]" value="${a}" />

我想做以下事情:第一次访问时,用户应该输入一个数字(整数)。在计算中,所有值都是 Double 以防止铸造副作用。当站点刷新/用户想要重复计算时,输入字段应预设为最近使用的值。因此我尝试 fmt:parseNumber 将对象中的 Double 值解析为 Integer.

一开始我忽略了 integerOnly = "true" 但出现了错误(因为“1000.0”不是有效输入,这是可以理解的,因为我指定了 pattern="[0-9]")。

但是设置 integerOnly 后,它会将值从 1000.0 更改为 10000。我究竟做错了什么?我怎样才能解析它来实现我的目标?

如果您使用的是 EL 2.2+,您可以通过在 Double 对象上调用 non-getter 方法简单地将双精度转换为整数:

${yourDouble.intValue()}

参见: