【问题标题】:BigDecimal rounding in jsf 1.1jsf 1.1 中的 BigDecimal 舍入
【发布时间】:2011-02-13 02:30:48
【问题描述】:

在 el-1.0 中有一个错误,jsf 1.1 使用该错误将 BigDecimal 转换为 double,然后在更新模型阶段返回 BigDecimal。这发生在 ELSupport.java -> coerceToNumber 类中,并在 el-impl-2.1.2-b03 中得到修复。最终结果是,如果用户输入 54.93,那么当 updateModel 阶段发生时,它会导致 54.92999999...。

假设我没有升级到 el-2.1.2-b03 的选项,但仍必须保证我的计算以及我发送到后端的内容的准确性。最好的舍入策略是什么?每当在 updateModel 阶段在我的支持 bean 中调用 setter 方法时,我正在考虑使用 ROUND_HALF_EVEN 舍入策略简单地将比例设置为 2。

有没有更好的解决方案?

【问题讨论】:

  • 虽然您的问题是有效的,但我想补充一点,JSF 本身是一个规范,而不是一个产品。所以 JSF (1.1) 没有 ELSupport.java,但特定的实现(例如 Mojarra)可能有。

标签: java jsf bigdecimal


【解决方案1】:

JSF 1.1 中没有解决方案。两种解决方法是:

  1. 绑定到字符串并通过调用 new BigDecimal(string) 转换为 BigDecimal;

  2. 继续绑定到 BigDecimal,但附加一个 ValueChangeListener,您可以在其中手动设置数据模型中的值,然后再在 FacesContext 上调用 renderResponse。您必须通过调用 renderResponse 跳过更新模型阶段,否则这将不起作用。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多