Problemy z zaokrąglaniem i precyzją w XSLT 1.0
Mam niespójność podczas używania xsl,
to jest xml,
<Rate>
<TotalRate>506.41</TotalRate>
<TotalTax>17</TotalTax>
<Currency>INR</Currency>
</Rate>
i xsl,
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="[url=http://www.w3.org/1999/XSL/Transform"]http://www.w3.org/1999/XSL/Transform"[/url] xmlns:fo="[url=http://www.w3.org/1999/XSL/Format">]http://www.w3.org/1999/XSL/Format">[/url]
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<TotalAmount>
<xsl:value-of select="Rate/TotalRate + Rate/TotalTax"/>
</TotalAmount>
</xsl:template>
</xsl:stylesheet>
I jest wyjście,
<TotalAmount xmlns:fo="[url=http://www.w3.org/1999/XSL/Format">523.4100000000001</TotalAmount>]http://www.w3.org/1999/XSL/For ... gt%3B[/url]
ale oczekiwany O/R,
<TotalAmount xmlns:fo="[url=http://www.w3.org/1999/XSL/Format">523.41</TotalAmount>]http://www.w3.org/1999/XSL/For ... gt%3B[/url]
Dlaczego o/p 523.4100000000001? jak uzyskać 523,41 bez zaokrąglania w górę?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
1 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
W XSLT 1.0 liczby są implementowane z typem
double
i tak jak w przypadku każdego typu binarnego zmiennoprzecinkowego następuje utrata precyzji.
W XSLT 2.0/XPath 2.0 możesz używać typu do pracy bez utraty precyzji
.
Rozwiązanie I. XSLT 1.0
:
Posługiwać się
funkcja :
Gdy ta transformacja ma zastosowanie do dostarczonego dokumentu
XML:
chciałem prawidłowy wynik
:
Tutaj jest również przykład pokazujący, że wymagana precyzja nie może być znana statycznie i może być przekazana do transformacji jako parametr zewnętrzny/globalny
:
Gdy ta konwersja ma zastosowanie do dostarczonego dokumentu XML, otrzymuje się dwa wyniki - z dokładnością 2 i dokładność 13
:
II. Rozwiązanie XSLT 2.0 używające
:
Po zastosowaniu tej transformacji do tego samego dokumentu XML (powyżej) uzyskuje się pożądany, prawidłowy wynik
: