[
https://issues.apache.org/jira/browse/AVRO-3254?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated AVRO-3254:
---------------------------------
Labels: pull-request-available (was: )
> .NET - Automatically scale AvroDecimal values when serializing
> --------------------------------------------------------------
>
> Key: AVRO-3254
> URL: https://issues.apache.org/jira/browse/AVRO-3254
> Project: Apache Avro
> Issue Type: Improvement
> Components: csharp
> Reporter: Nathan Daniels
> Priority: Minor
> Labels: pull-request-available
> Time Spent: 10m
> Remaining Estimate: 0h
>
> *Problem*
> When serializing an {{{}AvroDecimal{}}}, the Decimal class's
> {{ConvertToBaseValue}} method will throw an exception if the scale of the
> decimal does not exactly match the scale defined in the schema.
> The exception goes something like
> `{{{}The decimal value has a scale of \{scale} which cannot be encoded
> against a logical 'decimal' with a scale of \{logicalScale}{{}}}}`
> I feel this is far too restrictive and unintuitive from a usability
> perspective. For example, it is not possible to serialize the c# decimal
> 1.0m into a schema field of precision 20 and scale 2, because 1.0 has a
> "scale" of 1. Instead, the user must force the decimal to be {{1.00m}} if
> they want to serialize despite the fact that 1.0 and 1.00 are the same exact
> real number. Now the user needs to be aware of the scale defined in the
> schema before attempting to serialize.
> *Solution?*
> I propose the {{Decimal}} and {{AvroDecimal}} classes be smart enough to
> re-scale a value into the scale specified in the schema if doing so would not
> result in data loss. It is relatively trivial operation to do so, and would
> make using {{AvroDecimal}} much easier.
> I will open a PR with my proposed improvement, but essentially the
> {{Decimal}} class will convert the {{AvroDecimal}} to the desired scale prior
> to serialization, and continue to throw the exception if doing so would
> result in data loss.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)