xsl-list
[Top] [All Lists]

RE: rounding within the "format-number" function

2006-01-26 10:30:20
From: Michael Kay

What I have noticed is that the XSL  "format-number" function 
 rounds to
the nearest even number, instead of the bigger one, as is usual and
would be expected.  According to one site, this is sometimes called
"banker's rounding." 

implementations written in Java probably used the underlying JDK class
library, which did "banker's rounding", but implementations in other
languages might have used a different algorithm. XSLT 2.0 
defines the rules
as you describe.

It may be that what OP is witnessing is an artifact of floating point
calculations returning something like .49999999 and rounding down.

<xsl:value-of select='format-number( round(100*$number) div 100 ,
"##.00" )'  

Isn't it the case that this can still fail, only quite a bit less
frequently?  To ensure correct up-rounding, use this:

<xsl:value-of select="format-number(ceiling(100 * $number) 
        div 100, '##.00')"/>



HTH,

-----------------------------------
Mike Haarman,
XSL Developer,
Internet Broadcasting Systems, Inc.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--