Should this produce a decimal, rounded to some number of fraction digits, or 
convert to floating point?


________________________________
From: Steve Lawrence <slawre...@apache.org>
Sent: Wednesday, September 4, 2019 1:35 PM
To: users@daffodil.apache.org <users@daffodil.apache.org>
Subject: Re: Non-terminating decimal expansion ... huh?

This seems like a bug in our DFDL expression implementation to me. A
small example that reproduces this is the expression:

  xs:decimal(180) div xs:decimal(8388607)

But this works on a couple of XPath test implementations I've tried. I'd
guess that Daffodil needs to provide a rounding method so that we don't
get these infinite decimal errors.

Though, the xs:double does seem like the right workaround.


On 9/4/19 1:27 PM, Beckerle, Mike wrote:
> You are doing divisions among integers.
>
> If you want it to convert to floating point you need to be explicit.
>
> Otherwise it tries to keep things as decimal, but clearly that can't work for
> division.
>
> I suggest changing your 180 constants to xs:double(180) That should force
> everything to convert into double-precision floating point.
> --------------------------------------------------------------------------------
> *From:* Costello, Roger L. <coste...@mitre.org>
> *Sent:* Wednesday, September 4, 2019 1:18 PM
> *To:* users@daffodil.apache.org <users@daffodil.apache.org>
> *Subject:* Non-terminating decimal expansion ... huh?
>
> Hello DFDL community,
>
> The below DFDL schema produces this error message:
>
> *[error] Parse Error: Non-terminating decimal expansion; no exact 
> representable
> decimal result. (within Expression Evaluation Error: Non-terminating decimal
> expansion; no exact representable decimal result.*
>
> What does that mean? Why am I getting it? How to fix it?  /Roger
>
> <xs:elementname="input">
> <xs:complexType>
> <xs:sequence>
> <xs:elementname="command-code"type="unsignedint3"/>
> <xs:elementname="longitude">
> <xs:complexType>
> <xs:sequence>
> <xs:elementname="raw"type="unsignedint24"/>
> <xs:elementname="degrees"type="xs:string"dfdl:inputValueCalc="{
>                              if (../raw eq 0) then '0 degrees'
>                              else if (../raw lt 8388607) then 
> fn:concat((../raw
> * 180 div 8388607), ' degrees east')
>                              else fn:concat('-',((../raw - 8388607) * 180 div
> 8388607), ' degrees west')
>                              }"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> <xs:elementname="area-code"type="unsignedint5"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>

Reply via email to