从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
在无法确定语言环境时会绕过type
和pattern
属性。这记录在JSTL spec中:
如果此操作无法确定格式设置的语言环境,它将使用Number.toString()
作为输出格式。
有关如何控制语言环境解析的信息,请参见9.2格式化语言环境。
使用curl时,请尝试设置标题accept-language
。