Очень хороший вопрос! Это обычно означает, что я не знаю ответа, но я надеюсь, что кто-то еще знает, потому что это тоже для меня боль.
Во всяком случае, я провел поиск и думаю, что функция round-half-to-even
может помочь (http://www.xqueryfunctions.com/xq/fn_round-half-to-even.html)
)
Ваш код станет:
<xsl:value-of
select="
round-half-to-even(
myNode/DecimalValue
, myNode/DecimalPlaces
)
"
/>
Теперь немного по касательной:
Для людей, которые используют XSLT 1.1 или ниже и XPath 1, вы можете использовать это:
<xsl:value-of
select="
concat(
substring-before(DecimalValue, '.')
, '.'
, substring(substring-after(DecimalValue, '.'), 1, DecimalPlaces -1)
, round(
concat(
substring(substring-after(DecimalValue, '.'), DecimalPlaces, 1)
, '.'
, substring(substring-after(DecimalValue, '.'), DecimalPlaces+1)
)
)
)
"
/>
Конечно, этот код хуже , чем оригинал, но если кто-нибудь знает, как решить исходный вопрос для XPath 1, и у него есть идея получше, чем эта, я хотел бы услышать это.
(Мне все чаще хотелось бы, чтобы мир вообще пропустил XML и сразу перешел на JSON)