我需要在XSLT1.0中进行求模运算。但是,它没有返回在 Java 中运行良好的预期结果。
XSLT1.0:
输入:
<xsl:variable name="num2" select="'501108006111600075131466'"/>
<xsl:variable name="num3" select="'3214282912345698765432161182'"/>
<xsl:value-of select="$num2 mod 97"/>
<xsl:value-of select="$num3 mod 97"/>
输出:
82
65
Java
输入
StringBuilder numeric = new StringBuilder();
numeric.append(501108006111600075131466);//Input1
//numeric.append(3214282912345698765432161182);//Input2
BigInteger nt = new BigInteger(numeric.toString());
return nt.mod(BigInteger.valueOf(97)).intValue() == 1;
输出
true
true
在Java中,返回预期结果,但在XSLT1.0中它不返回准确的输出。在XSLT1.0中还有其他方法实现mod运算符吗?
考虑使用数字类型,而不是字符串,但对于很大的数字,您可能需要切换到 XSLT/XPath 2 或 3,其中您有
xs:integer
和 xs:decimal
类型,例如
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
expand-text="yes">
<xsl:variable name="num1" as="xs:integer" select="501108006111600075131466"/>
<xsl:variable name="num2" as="xs:integer" select="3214282912345698765432161182"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template name="xsl:initial-template">
<tests>
<test expression="{$num1} mod 97">{$num1 mod 97}</test>
<test expression="{$num2} mod 97">{$num1 mod 97}</test>
</tests>
</xsl:template>
</xsl:stylesheet>
<tests>
<test expression="501108006111600075131466 mod 97">1</test>
<test expression="3214282912345698765432161182 mod 97">1</test>
</tests>