从Oracle Commerce Platform ATG 11.2开始,当我命中JBOSS服务器时,在Web浏览器请求和curl之间得到了不同的结果-就像忽略了formatNumber一样,值遭受浮点舍入错误的困扰。

<span itemprop="price-currency" content="USD">$</span>

<span itemprop="price" class="selection-price">
    <fmt:formatNumber type="currency"
                      pattern="##0.00;"
                      value="${selectionItem.listPriceAmount}"/>
</span>


保持100%的一致性,在浏览器中点击页面将产生格式化的值,例如:


$ 27.99
$ 20.00
$ 10.00


但是,当Google抓取该网站时,发现了一个问题,该问题可以通过同一页面的curl进行100%复制。这些相同的值显示为:


$ 27.990000000000002
$ 20.0
$ 10.0


没有内置的用户代理逻辑,只有JSTL formatNumber

知道为什么通过完全相同的JSP的完全相同的路径会产生不同的结果吗?

最佳答案

fmt:formatNumber在无法确定语言环境时会绕过typepattern属性。这记录在JSTL spec中:


  如果此操作无法确定格式设置的语言环境,它将使用Number.toString()作为输出格式。


有关如何控制语言环境解析的信息,请参见9.2格式化语言环境。

使用curl时,请尝试设置标题accept-language

07-26 07:56