Я подозреваю, что @ID
и $contentOffsetId
оба являются целыми числами, маскирующимися как двойные, и лучшей стратегией будет использование целочисленной арифметики для их добавления, а не арифметики с плавающей точкой. Преобразование в строку будет затем использовать правила для целых чисел, а не правила для двойных чисел, что позволит избежать использования научной нотации.
Вы не показали нам, откуда взято $contentOffsetId
, но если мое предположение верно, объявите его как целое число, используя as="xs:integer"
в объявлении переменной.
Что касается @ID
, я предполагаю, что ваша таблица стилей не поддерживает схемы и, следовательно, @ID
является нетипизированной атомарной; Вы можете преобразовать его в целое число, используя xs:integer(@ID)
. По умолчанию, когда нетипизированные атомарные значения используются в арифметических выражениях, это преобразование в xs:double
, но это во многом наследие XSLT 1.0 и часто неуместно.
Кстати, в XSLT 2.0 вы можете заменить
<xsl:attribute name="x"><xsl:value-of select="Y"/></xsl:attribute>
от
<xsl:attribute name="x" select="Y"/>