接近整分钟的秒数似乎转换不正确

时间:2015-09-14 17:43:42

标签: xslt xslt-1.0

我遇到了一个我不确定如何解决的问题。我使用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 &gt;= 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>

1 个答案:

答案 0 :(得分:1)

这是因为format-number进行了舍入而不是截断。 format-number(59.97, '00')的值为60,而不是59.因此请改用format-number(floor($Duration div 60) mod 60, '00')