我遇到了一个我不确定如何解决的问题。我使用Seconds to Time中的答案在XSLT 1.0中创建模板。但是,当我的持续时间接近整数时,结果是不正确的。当对比远大于或小于此值的值运行时,结果显示正确。
我的模板如下。当我的持续时间为3597时,结果出现在00:60:57而不是00:59:57,持续时间为955,结果为00:16:55而不是00:15:55。
我已经尝试删除模数,我认为我可以只对结果进行子串,但是这并没有改变3597结果并搞砸了下面代码中正确的多个结果。我还扩展了format-number以包含更多数字,但这也不会改变结果。我也试过使用地板($ Duration - $ div div 60),但这似乎没有用,或者我把它格式化了错误。
我错过了什么?我不知道3597/60如何等于60,特别是当我拿模数时。
<xsl:template name="calculatedDuration">
<xsl:param name="Duration"/>
<xsl:choose>
<xsl:when test="$Duration >= 3600">
<xsl:value-of select="concat(format-number($Duration div 3600, '00'), ':')"/>
</xsl:when>
<xsl:otherwise>00:</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="format-number($Duration div 60 mod 60, '00')"/>
<xsl:value-of select="concat(':', format-number($Duration mod 60, '00'))"/>
</xsl:template>
答案 0 :(得分:1)
这是因为format-number
进行了舍入而不是截断。 format-number(59.97, '00')
的值为60,而不是59.因此请改用format-number(floor($Duration div 60) mod 60, '00')
。