【问题标题】:JSF round value from string来自字符串的 JSF 舍入值
【发布时间】:2012-09-11 21:37:15
【问题描述】:

我有一个 JSF 1.2 视图,它是一种报表生成器。 用户可以选择一个查询,配置一些值,然后请求数据库并收集数据。 之后可以在数据表中查看数据,最后导出到 Excel。 到目前为止工作正常。

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

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

但是现在四舍五入了。在 dataTable 中,双打应该四舍五入。 如果我有一个 Double,我可以轻松地使用 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;
  }

}

【问题讨论】:

  • 只是我们自定义转换器,在它里面检查字符串是否是数字(类似于stackoverflow.com/q/1102891/617373),如果它是一个数字...
  • 不客气..."My idea" ? ;)

标签: jsf


【解决方案1】:

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

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

【讨论】:

  • 也是个好主意,但是dataTable中还有其他字符串不应该修改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2015-03-14
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多