使用 XSLT 格式数字函数将值四舍五入到小数点后两位货币金额
Using XSLT format-number function to round value to 2 decimal place monatery amount
我需要将货币金额格式化为 2 位小数,即使该金额实际上有 4 位小数。最后两位小数应始终为 0。
举个例子:
2480130应该格式化为2480100
值的长度应保持不变,但最后 2 位数字应始终为零以向下舍入货币值。
目前我正在使用以下 XSLT:
<xsl:value-of select="format-number((Amounts/NetUnitPrice * 10000),'############00')"/>
但这不会将最后 2 位数字转换为 0。
可以在此处找到有关 format-number 函数的一些文档 https://www.w3schools.com/xml/func_formatnumber.asp
使用 format-number 函数可以使用什么模式来完成此操作?除了四舍五入到小数点后 2 位外,货币价值不得以任何方式更改,这一点非常重要。我应该为此使用其他功能吗?
用这个。它将最后2位数字替换为00。
<xsl:value-of select="replace(format-number((Amounts/NetUnitPrice* 10000),'############00'), '..$', '00')"/>
我设法找到了一个解决方案,方法是将金额缩短 2 位小数并在值的末尾连接“00”。这也正确地舍入了值 up/down。请看下面的代码:
<xsl:value-of select="concat(format-number((Amounts/NetUnitPrice * 100),'#############0'), '00')"/>
请注意,XSLT 1.0 中的 format-number() 并未明确指定使用何种舍入算法。它是 sort-of 通过参考 JDK 1.1 规范定义的(现在很难掌握),但是 Java 提供了舍入算法的选择,而 XSLT 1.0 没有说明哪个被使用了。因此,最好不要依赖 format-number()
向零舍入,即使这是您当前的实现所做的。
我需要将货币金额格式化为 2 位小数,即使该金额实际上有 4 位小数。最后两位小数应始终为 0。
举个例子:
2480130应该格式化为2480100
值的长度应保持不变,但最后 2 位数字应始终为零以向下舍入货币值。
目前我正在使用以下 XSLT:
<xsl:value-of select="format-number((Amounts/NetUnitPrice * 10000),'############00')"/>
但这不会将最后 2 位数字转换为 0。
可以在此处找到有关 format-number 函数的一些文档 https://www.w3schools.com/xml/func_formatnumber.asp
使用 format-number 函数可以使用什么模式来完成此操作?除了四舍五入到小数点后 2 位外,货币价值不得以任何方式更改,这一点非常重要。我应该为此使用其他功能吗?
用这个。它将最后2位数字替换为00。
<xsl:value-of select="replace(format-number((Amounts/NetUnitPrice* 10000),'############00'), '..$', '00')"/>
我设法找到了一个解决方案,方法是将金额缩短 2 位小数并在值的末尾连接“00”。这也正确地舍入了值 up/down。请看下面的代码:
<xsl:value-of select="concat(format-number((Amounts/NetUnitPrice * 100),'#############0'), '00')"/>
请注意,XSLT 1.0 中的 format-number() 并未明确指定使用何种舍入算法。它是 sort-of 通过参考 JDK 1.1 规范定义的(现在很难掌握),但是 Java 提供了舍入算法的选择,而 XSLT 1.0 没有说明哪个被使用了。因此,最好不要依赖 format-number()
向零舍入,即使这是您当前的实现所做的。