[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
At 2011-01-24 15:39 +0100, Szabo, Patrick \(LNG-VIE\) wrote:
Because you aren't "rounding to the closest digit", you are "rounding to the closest even parity digit".
Right ... because the "5" is half-rounding the "4" to "4". "4" is the closest even-parity digit to the value "4.5". "6" is the closes even-parity digit to the value "5.5".
That surprises me ... I would have expected "298.15" because the next digit is not simply "5" or above. I'm guessing it has to do with the binary representation of the number.
Because "round-half-to-even" rounds to an even-parity digit (0,2,4,6,8) as you request.
If you are rounding for presentation purposes, then use:
format-string(.,'.00')
... which rounds the third digit to the second digit simply, where "5" goes to the ceiling (a negative number gets smaller, a positive number gets bigger).
I hope this helps.
. . . . . . . . . Ken
Re: [xsl] round-half-to-even problem.
Subject: Re: [xsl] round-half-to-even problem. From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Mon, 24 Jan 2011 09:48:39 -0500 |
At 2011-01-24 15:39 +0100, Szabo, Patrick \(LNG-VIE\) wrote:
I'm using saxon 9 EE and xslt 2.0. I want to round but I'm getting weird outputs.
Because you aren't "rounding to the closest digit", you are "rounding to the closest even parity digit".
My Template looks like this:
<xsl:template match="data"> <absatz> <xsl:choose> <xsl:when test="@type='Number' and string-length(substring-after(., '.')) > 2"> <xsl:value-of select="round-half-to-even(text(), 2)"/> </xsl:when> <xsl:otherwise> <xsl:apply-templates/> </xsl:otherwise> </xsl:choose> </absatz> </xsl:template>
Example: <data type="Number">1351.845</data>
Output: <absatz>1351.84</absatz>
Right ... because the "5" is half-rounding the "4" to "4". "4" is the closest even-parity digit to the value "4.5". "6" is the closes even-parity digit to the value "5.5".
Desired: <absatz>1351.85</absatz>
Example: <data type="Number">298.15499999999997</data>
Output: <absatz>298.16</absatz> <- which is correct or at least what I want.
That surprises me ... I would have expected "298.15" because the next digit is not simply "5" or above. I'm guessing it has to do with the binary representation of the number.
Can anybody explain this to why on time it takes the bigger and the next time the smaller number ?!
Because "round-half-to-even" rounds to an even-parity digit (0,2,4,6,8) as you request.
Can I control that somehow ?!
If you are rounding for presentation purposes, then use:
format-string(.,'.00')
... which rounds the third digit to the second digit simply, where "5" goes to the ceiling (a negative number gets smaller, a positive number gets bigger).
I hope this helps.
. . . . . . . . . Ken
-- Contact us for world-wide XML consulting & instructor-led training Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] round-half-to-even problem., Szabo, Patrick \(LNG | Thread | Re: [xsl] round-half-to-even proble, David Carlisle |
[xsl] round-half-to-even problem., Szabo, Patrick \(LNG | Date | Re: [xsl] round-half-to-even proble, David Carlisle |
Month |