在jsp中显示具有精确2位小数的双精度值

时间:2016-05-14 06:51:43

标签: java algorithm jstl

我面对这种情况,我必须显示价格是一个双倍,例如75.30美元,我的后端代码返回75.3美元。为了以经典的美元价格方式(超级脚本十进制值)显示它,我将它们分成2并使其显示。以下代码。

    <c:if test="${not empty price }">
        <c:set var="displayPrice" value="${fn:split(price, '.')}" />
        <sup>$</sup>${displayPrice[0]}
        <sup>
           <f:formatNumber minIntegerDigits="2" value="${displayPrice[1]}"/>
        </sup>
    </c:if>

但在这种情况下发生的事情是,75.3在显示时变为75.03。所以我修改了这样的代码。

<c:set var="decimalPrice" 
       value="${displayPrice[1]<10 ?displayPrice[1]*10:displayPrice[1]}" />
<f:formatNumber minIntegerDigits="2" value="${decimalPrice}"/>

这很有效,但价值45美元以上的价格也显示为45.30美元。

无法更改后端代码,如何使用任何标记库或最少的操作来实现此目的。

2 个答案:

答案 0 :(得分:0)

尝试格式标记lib

中的pattern属性
<f:formatNumber type="number" pattern="0.00" value="${decimalPrice}"/>
如果需要,

模式0.00将在小数点后填充0 s,如果不需要填充任何内容,您也可以在模式中使用#

编辑-1

而不是分裂,你可以尝试下面,提取

<fmt:formatNumber value="${decimalPrice}" maxFractionDigits="2" />
<fmt:formatNumber value="${decimalPrice}" maxIntegerDigits="0" />

答案 1 :(得分:0)

想出来,

<f:formatNumber minFractionDigits="2" value="${price}" var="formattedPrice" />

在拆分之前格式化它。诀窍。