RE: [xsl] rounding within the "format-number" function

Subject: RE: [xsl] rounding within the "format-number" function
From: "Haarman, Michael" <mhaarman@xxxxxxxxx>
Date: Thu, 26 Jan 2006 11:30:20 -0600
> 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.

Current Thread