[ 
https://issues.apache.org/jira/browse/OLINGO-1087?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15890436#comment-15890436
 ] 

Christian Amend commented on OLINGO-1087:
-----------------------------------------

The V2 specification pdf is not available on the website anymore and the html 
version does not have this paragraph: 
2.2.1.7.1.1 Precision
This is a positive integer that specifies the maximum number of decimal digits 
that an instance of the decimal type can have, both to the left and to the 
right of the decimal point. Possible values for Precision are 1, 2, or 3.

V3 specifies it as follows: 
2.2.1.7.1.1 Precision
The Precision facet is a positive integer that specifies the maximum number of 
decimal digits that an instance of the decimal type can have, both to the left 
and to the right of the decimal point.

And V4 is online available: 
http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part3-csdl/odata-v4.0-errata03-os-part3-csdl-complete.html#_Toc453752531
For a decimal property the value of this attribute specifies the maximum number 
of significant decimal digits of the property’s value; it MUST be a positive 
integer. If no value is specified, the decimal property has unspecified 
precision.

We only evaluate this because it is part of the specification.  You can disable 
the Facet validation by setting the flag at the EntityProviderReadProperties 
with the isValidatingFacets(boolean) method. 

I will check with the OData specification people to see what they meant with 
significant. I assumed the arithmetic definition: 
https://simple.wikipedia.org/wiki/Arithmetic_precision as opposed to this 
definition: https://en.wikipedia.org/wiki/Significant_figures

I would not like to introduce something which goes against the specification.

> Precision in EdmDecimal not calculated correctly
> ------------------------------------------------
>
>                 Key: OLINGO-1087
>                 URL: https://issues.apache.org/jira/browse/OLINGO-1087
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata2-core
>    Affects Versions: V2 2.0.8
>            Reporter: Svante von Erichsen
>         Attachments: 0001-OLINGO-1087-Fix-calculation-of-precision.patch
>
>
> The "precision" found in a read number is currently at least the number of 
> decimals (omitting trailing zeroes).  That seems to be wrong, or at least not 
> consistent with at least some server side view of the matter, for numbers 
> smaller than 0.1 (the number shown has 35 decimals, but precision 34):
> org.apache.olingo.odata2.api.edm.EdmSimpleTypeException: The metadata 
> constraints '[Precision=34]' do not match the literal 
> '0.08102359900000000170194880411145277'.
>                 at 
> org.apache.olingo.odata2.core.edm.EdmDecimal.internalValueOfString(EdmDecimal.java:107)
>                 at 
> org.apache.olingo.odata2.core.edm.AbstractSimpleType.valueOfString(AbstractSimpleType.java:91)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonPropertyConsumer.readSimpleProperty(JsonPropertyConsumer.java:236)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonPropertyConsumer.readPropertyValue(JsonPropertyConsumer.java:169)
>                 ... 69 common frames omitted
> Wrapped by: org.apache.olingo.odata2.api.ep.EntityProviderException: An 
> exception of type 'EdmSimpleTypeException' occurred.
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonPropertyConsumer.readPropertyValue(JsonPropertyConsumer.java:171)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonEntryConsumer.handleName(JsonEntryConsumer.java:172)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonEntryConsumer.readEntryContent(JsonEntryConsumer.java:130)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonEntryConsumer.readFeedEntry(JsonEntryConsumer.java:117)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonFeedConsumer.readArrayContent(JsonFeedConsumer.java:153)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonFeedConsumer.handleName(JsonFeedConsumer.java:122)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonFeedConsumer.readFeedContent(JsonFeedConsumer.java:111)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonFeedConsumer.readFeed(JsonFeedConsumer.java:96)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonFeedConsumer.readFeedStandalone(JsonFeedConsumer.java:63)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonEntityConsumer.readDeltaFeed(JsonEntityConsumer.java:95)
>                 at 
> org.apache.olingo.odata2.core.ep.consumer.JsonEntityConsumer.readFeed(JsonEntityConsumer.java:81)
>                 at 
> org.apache.olingo.odata2.core.ep.JsonEntityProvider.readFeed(JsonEntityProvider.java:309)
>                 at 
> org.apache.olingo.odata2.core.ep.ProviderFacadeImpl.readFeed(ProviderFacadeImpl.java:165)
>                 at 
> org.apache.olingo.odata2.api.ep.EntityProvider.readFeed(EntityProvider.java:676)



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to