xsl-list
[Top] [All Lists]

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

2020-06-23 10:52:58
On Tue, 2020-06-23 at 14:29 +0000, Roger L Costello 
costello(_at_)mitre(_dot_)org
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
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>