Сумма различий проблема / ошибка в XSLT 1.0 - PullRequest
4 голосов
/ 04 декабря 2009

У меня есть эти данные XML, и я пытаюсь составить их сумму, используя приведенный ниже фрагмент XSLT.

Xml

<?xml version="1.0" encoding="utf-8"?>
<values>
    <value>159.14</value>
    <value>-2572.50</value>
    <value>-2572.50</value>
    <value>2572.50</value>
    <value>2572.50</value>
    <value>-159.14</value>
</values>

* 1009 XSLT *

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
    <xsl:value-of select="sum(values/value)"/>
</xsl:template>

</xsl:stylesheet>

В моем мире значение должно быть 0 , но в итоге оно будет -0.0000000000005684341886080801

Запустите его в Visual Studio и убедитесь сами. Почему? это происходит?

Ответы [ 3 ]

5 голосов
/ 04 декабря 2009

Кажется, ваш XSLT-процессор преобразует десятичные числа строк в числа с плавающей запятой перед суммой;

Ну, вы всегда можете использовать функцию округления и делить на желаемую точность или использовать функцию числа-формата, если она доступна:

<xsl:template match="/">
    <xsl:value-of select="round(sum(values/value)) div 100"/><br />
    <xsl:value-of select="format-number(sum(values/value), '0.00')"/>
</xsl:template>
2 голосов
/ 14 декабря 2010

Попробуйте это

<xsl:value-of select="format-number(sum(values/value),'0.00')"/>
1 голос
/ 04 декабря 2009

Как насчет добавления раунда?

round(sum(values/value))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...