## Re: [xsl] Function that reduces the number of digits to the right of the decimal point?

 Subject: Re: [xsl] Function that reduces the number of digits to the right of the decimal point? From: "Liam R. E. Quin liam@xxxxxxxxxxxxxxxx" Date: Tue, 23 Jun 2020 15:52:52 -0000
```On Tue, 2020-06-23 at 14:29 +0000, Roger L Costello costello@xxxxxxxxx
wrote:
>
> I want a function that reduces the number of digits to the right of
> the decimal point in \$num according to the value specified in
> \$desired-number-of-digits-after-decimal-point

Make a variable, \$pattern, "

<xsl:sequence select="
let \$pattern := '(\.\d{' || \$ndigits || '})\d+\$'
return replace(\$input,  \$pattern, '\$1')
" />

may or may not be clearer - using a variable \$pattern simplifies
constructructing regular expressions containing braces.

This will work in XSLT 3and XQuery, but doesn't cope well with zero,
nor with input ending in .

So one could write,

<xsl:sequence select="
if (\$ndigits le 0) then substring-before(\$input, '.')
else
let \$pattern := '(\.\d{' || \$ndigits || '})\d+\$'
return replace(\$input,  \$pattern, '\$1')
" />

This is more succinct than yours, but whether it's easier to follow
depends on one's comfort with regular expressions and knowing that
\d{3} will match exactly digits.

One of the topics in the talk i'll be  giving tomorrow at Markup UK
relates to the rhetorical nature of the stylesheets we write.

Liam

--
Liam Quin, https://www.delightfulcomputing.com/
Available for XML/Document/Information Architecture/XSLT/
XSL/XQuery/Web/Text Processing/A11Y training, work & consulting.
Barefoot Web-slave, antique illustrations:  http://www.fromoldbooks.org

```