jsf 1.1中的BigDecimal舍入

时间:2011-02-13 02:30:49

标签: java jsf bigdecimal

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。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

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

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

  2. 继续绑定到BigDecimal,但附加一个ValueChangeListener,您可以在FacesContext上调用renderResponse之前手动设置数据模型中的Value。您必须通过调用renderResponse跳过更新模型阶段,否则这将无效。