[ 
https://issues.apache.org/jira/browse/KAFKA-9667?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andy Coates updated KAFKA-9667:
-------------------------------
    Description: 
The Connect Json serde was recently enhanced to support serializing decimals as 
standard JSON numbers, (Original work done under -KAFKA-8595)-, e.g. `1.23`.  
However, there is a bug in the implementation: it's stripping trailing zeros!  
`1.23` is _not_ the same as `1.230`.  The first is a number accurate to 2 
decimal places, where as the later is accurate to 3 dp.

It is important that trailing zeros are not dropped when de(serializing) 
decimals.  For some use-cases it may be acceptable to drop the trailing zeros, 
but for others it definitely is not.
h3. Current Functionality

If a JSON object was to contain the number `1.230` then the Java 
JsonDeserializer would correctly deserialize this into a `BigDecimal`. The 
BigDecimal would have a scale of 3, which is correct.

However, if that same BigDecimal was then serialized back to JSON using the 
Java JsonSerializer it would incorrectly strip the zeros, serializing to 
`1.23`. 
h3. Expected Functionality

When serializing, trailing zeros should be maintained.  For example, a 
BigDecimal such as `1.230`, (3 dp), should be serialized as `1.230`. 
h3. Compatibility

With this bug fix any computation on decimal values that resulted in a number 
with trailing zeros, would see the number correctly serialized with those 
trailing zeros.

Both the old serialized number, e.g. `1.23`, and the proposed corrected 
serialized number, e.g. `1.230`, are valid JSON numbers. Downstream consumers 
should have no issue deserializing either.  

 

 

  was:
The Connect Json serde was recently enhanced to support serializing decimals as 
standard JSON numbers, (Original work done under -KAFKA-8595)-, e.g. `1.23`.  
However, there is a bug in the implementation: it's stripping trailing zeros!  
`1.23` is _not_ the same as `1.230`.  The first is a number accurate to 2 
decimal places, where as the later is accurate to 3 dp.

It is important that trailing zeros are not dropped when de(serializing) 
decimals.  For some use-cases it may be acceptable to drop the trailing zeros, 
but for others it definitely is not.
h3. Current Functionality

If a JSON object was to contain the number `1.230` then the Java 
JsonDeserializer would correctly deserialize this into a `BigDecimal`. The 
BigDecimal would have a scale of 3, which is correct.

However, if that same BigDecimal was then serialized back to JSON using the 
Java JsonSerializer it would incorrectly strip the zeros, serializing to 
`1.23`. 
h3. Expected Functionality

When serializing, trailing zeros should be maintained.  For example, a 
BigDecimal such as `1.230`, (3 dp), should be serialized as `1.230`. 
h3. Compatibility

With this bug fix any computation on decimal values that resulted in a number 
with trailing zeros, would see the number serialized with those trailing zeros.

Both the old serialized number, e.g. `1.23`, and the proposed corrected 
serialized number, e.g. `1.230`, are valid JSON numbers. Downstream consumers 
should have no issue deserializing either.  

 

 


> Connect JSON serde strip trailing zeros
> ---------------------------------------
>
>                 Key: KAFKA-9667
>                 URL: https://issues.apache.org/jira/browse/KAFKA-9667
>             Project: Kafka
>          Issue Type: Bug
>          Components: KafkaConnect
>    Affects Versions: 2.4.0
>            Reporter: Andy Coates
>            Assignee: Andy Coates
>            Priority: Major
>
> The Connect Json serde was recently enhanced to support serializing decimals 
> as standard JSON numbers, (Original work done under -KAFKA-8595)-, e.g. 
> `1.23`.  However, there is a bug in the implementation: it's stripping 
> trailing zeros!  `1.23` is _not_ the same as `1.230`.  The first is a number 
> accurate to 2 decimal places, where as the later is accurate to 3 dp.
> It is important that trailing zeros are not dropped when de(serializing) 
> decimals.  For some use-cases it may be acceptable to drop the trailing 
> zeros, but for others it definitely is not.
> h3. Current Functionality
> If a JSON object was to contain the number `1.230` then the Java 
> JsonDeserializer would correctly deserialize this into a `BigDecimal`. The 
> BigDecimal would have a scale of 3, which is correct.
> However, if that same BigDecimal was then serialized back to JSON using the 
> Java JsonSerializer it would incorrectly strip the zeros, serializing to 
> `1.23`. 
> h3. Expected Functionality
> When serializing, trailing zeros should be maintained.  For example, a 
> BigDecimal such as `1.230`, (3 dp), should be serialized as `1.230`. 
> h3. Compatibility
> With this bug fix any computation on decimal values that resulted in a number 
> with trailing zeros, would see the number correctly serialized with those 
> trailing zeros.
> Both the old serialized number, e.g. `1.23`, and the proposed corrected 
> serialized number, e.g. `1.230`, are valid JSON numbers. Downstream consumers 
> should have no issue deserializing either.  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to