Double.toString没有大值的指数表示法

时间:2014-07-30 14:10:17

标签: jsf double tostring jsf-2.2

在我的JSF2应用程序中,我希望显示双值而不使用指数表示法。有可能吗?

我不能使用NumberFormatDecimalFormat,因为它会将我的数据类型更改为String。

我从Java文档中了解到,如果我的double值小于10 ^ -3或大于或等于10 ^ 7,则表示为所谓的" 计算机化科学记数法"(参考:http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#toString())。

而且,在JSF中显示double值时,它会在内部将任何数据类型转换为字符串。

例如,如果我的双倍值为9999999999,则会显示为9.9e^9。我希望它按原样显示。即9999999999

但是,有没有可能覆盖Double的这个角色,还是有其他方法可以解决这个问题?

2 个答案:

答案 0 :(得分:3)

这类问题的正确解决方案是尽可能长时间地传递内部数据类型。就在您将其显示给用户时,您可以使用DecimalFormat正确格式化它。

因此,您必须在JSF2 UI中找到显示双精度的所有位置,并在那里使用正确的格式化程序。

请注意,DecimalFormat不具有威胁安全性,因此您必须为每个请求创建一个新的格式化程序(至少)。

答案 1 :(得分:1)

如果您的代码提供了double或Double,则可以使用转换器直接在页面中显示该值:

<h:outputText value="#{myBean.someDoubleValue}">
    <f:convertNumber pattern="0"/>
</h:outputText>