多年来,我一直在使用XSLT1.0代码中的图片字符串“#.##”来格式化数字,如果数字有小数部分,则不显示小数,如果没有小数部分,则不显示小数。
Saxon 6.5.5.
format-number(123.456,'#.##’) 123.46
format-number(123.000,'#.##’) 123但是当使用XSLT2.0或3.0时,我会得到不同的行为。
Saxon 9.9.1.5J
format-number(123.456,'#.##’) 123.46
format-number(123.000,'#.##’) 123.0我还没弄清楚为什么最后一个案子有小数部分。https://www.w3.org/TR/xslt20/#dt-picture-string声明:
最小分数部分大小设置为在子图片的小数部分中找到的零数字符号字符的数目。
https://www.w3.org/TR/xpath-functions-30/#syntax-of-picture-string声明:
最小分数部分大小设置为子图片小数部分中的小数位家庭字符数。
如果没有零数字符号和十进制家庭字符,小数的大小应该是零,就像XSLT1.0中的情况一样。
我是不是遗漏了什么?
发布于 2020-05-01 07:07:54
撒克逊人正在适用这一规则:
如果(在进行上述调整后)
minimum-integer-part-size和minimum-fractional-part-size都为零,则minimum-fractional-part-size设置为1(1)。
XSLT1.0格式编号()规范是通过引用JDK1.1规范来定义的,这是一个严重的错误,因为(a)在JDK中它总是被严重低估,(b) JDK规范的那个版本现在几乎不可能被掌握。因此,我们花了很多时间从头开始编写一份新的规范,试图在JDK规范清晰、无缺陷但填补空白的情况下复制它。我们考虑到了不同的XSLT1.0供应商解释规范的方式,但并不认为任何现有的实现(或JDK)都是确定的。
您的测试用例类似于https://github.com/w3c/qt3tests/blob/master/fn/format-number.xml上的测试用例https://github.com/w3c/qt3tests/blob/master/fn/format-number.xml,该测试用例的注释引用了bug 29164。https://www.w3.org/Bugs/Public/show_bug.cgi?id=29164的bug条目显示,上面引用的规则是对规范的一个相当晚的添加/更改(2015年9月--比XPath 2.0晚了很久)。
bug条目中的讨论表明,首要考虑的是防止零被格式化为空字符串。也许事后看来,我们应该特别处理那件事。
https://stackoverflow.com/questions/61533859
复制相似问题