我希望以100.1之类的整数输入显示不同格式的十进制输入,如100.1,100.0 我使用以下检查来识别小数(变量输入是数字类型)
<xsl:when test="not(floor($input) = $input)">
它适用于像100.1这样的情况,但它不适用于像100.00这样的情况,这会返回false表示这不是小数。 然后我尝试使用
<xsl:when test="$input castable as xs:decimal">
这对于像100这样的整数不起作用,因为检查会返回true。 我试过了
<xsl:when test="$input instance of xs:decimal">
我为100.50这样的值弄错了,不知道为什么。 还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
您真的需要展示如何声明变量$input
的类型(或者在没有类型声明的情况下,如何初始化其值)。它有很大的不同。
请注意,100.5作为XPath文字生成xs:decimal值100.5,但100.5保持为无类型属性节点的值将转换为xs:double值,大约等于100.5。
原则上,您可以使用
标识非整数的小数$x instance of xs:decimal and not($x instance of xs:integer)
但是假设您首先将值创建为xs:decimal
或xs:integer
;如果您执行xs:decimal("100")
,那么您可能会[*]获得xs:decimal
而不是xs:integer
。
[*]我可能会说,因为规范要求它是xs:decimal,但它可以说它是xs:decimal的子类型,例如:它甚至可以在此处返回xs:unsignedByte
的实例,如果它选择了saxon:integer-in-range-1-to-100
的实例,只要它被定义为xs:decimal
的子类型。]
答案 1 :(得分:1)
如果要区分100和100.0,则不能位于数字域中。或许尝试:
<xsl:when test="contains($input, '.')">
或使用正则表达式。