来自字符串的JSF舍入值

来自字符串的JSF舍入值,jsf,Jsf,我有一个JSF1.2视图,它是一种报告生成器。 用户可以选择查询,配置一些值,然后请求数据库并收集数据。 之后,可以在数据表中查看数据,并最终导出到Excel。 到目前为止效果很好 根据查询的不同,列有不同的类型,其中一种是Double。 现在应该四舍五入双值 因为有很多行(几十行或几十万行),所以我将所有数据收集为字符串 以避免耗时的类型转换。 这很好,因为对于导出到Excel,我也需要字符串(写入Office XML) 但现在四舍五入开始了。在数据表中,双精度应四舍五入。 如果我有一个双人,

我有一个JSF1.2视图,它是一种报告生成器。 用户可以选择查询,配置一些值,然后请求数据库并收集数据。 之后,可以在数据表中查看数据,并最终导出到Excel。 到目前为止效果很好

根据查询的不同,列有不同的类型,其中一种是Double。 现在应该四舍五入双值

因为有很多行(几十行或几十万行),所以我将所有数据收集为字符串 以避免耗时的类型转换。 这很好,因为对于导出到Excel,我也需要字符串(写入Office XML)

但现在四舍五入开始了。在数据表中,双精度应四舍五入。 如果我有一个双人,我可以很容易地使用f:convertNumber,但我没有

我的想法是一个字符串转换器,它可以分析它是否是一个数值 然后格式化字符串。(性能不是那么关键,因为有 分页数据表中只有30条左右的记录)。我将如何做到这一点

有(其他)建议吗?谢谢
标记

编辑:
暂时解决

  public class ReportStringConverter implements Converter {

  DecimalFormat f = new DecimalFormat("#0.00");  

  public Object getAsObject(FacesContext context, UIComponent component, String value)        {
    return value;
  }

  public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (isNumeric(value.toString())) {
      return f.format(Double.parseDouble(value.toString()));
    } else {
      return value.toString();
    }
  }

  private boolean isNumeric(String s) {
    try {
      double d = Double.parseDouble(s);
    } catch (NumberFormatException e) {
      return false;
    }
    return true;
  }

}

您可以使用表达式语言将字符串转换为数字,方法是向其添加
0
(例如:
{'35.75'+0}
)。这使您可以简单地使用
f:convertNumber

<h:outputText value="#{'35.75' + 0}">
  <f:convertNumber pattern="0"/>
</h:outputText>


just us custom converter,在其内部检查字符串是否为数字(类似于此),以及是否为四舍五入的数字……欢迎您<代码>“我的想法”?;)这也是一个好主意,但是dataTable中还有其他不应该修改的字符串。