Sarthak Singh created AVRO-4108:
-----------------------------------

             Summary: `DoubleAray` converts double to float on array add
                 Key: AVRO-4108
                 URL: https://issues.apache.org/jira/browse/AVRO-4108
             Project: Apache Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.12.0
            Reporter: Sarthak Singh


Consider a field within an avro schema 

 
{code:avro}
{
"name": "SomeDoubleArray",
"type": {
"type": "array",
"items": "double"
}
},
{code}

Consider a record which fits that field 

{code:java}
"SomeDoubleArray": [0.9, 0.8],
{code}


When deserializing a this record with the schema mentioned above, we get back
 
```
"SomeDoubleArray": [0.8999999761581421, 0.800000011920929],
```
 
The reason for this is:

[https://github.com/apache/avro/blob/dd01f97869e374d6427bec999afa089f760791ab/lang/java/avro/src/main/java/org/apache/avro/generic/PrimitivesArrays.java#L549-L554]
 
```
@Override
    public void add(int location, Double o) {
      if (o == null) {
        return;
      }
      this.add(location, o.floatValue());
    }
```
  
 
When adding a double, it gets its float value and copies that to the array. For 
doubles values which cannot be represented as floats(.9 for example) we will 
see precision loss.  





--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to