MONEY types with precision greater than 18 digits are mapped into CT_NUMBER instead of being mapped into CT_CURRENCY. When using CT_CURRENCY, only 2 decimal digits are stored; when using CT_NUMBER more than 2 decimal digits may be stored. When assigning a numeric to a MONEY type, the logic performs a "rounding."
In the case of negative numbers, the decimal value returned was not "normalized" leading to the error.
Unexpected c-treeDB overflow errors were seen when setting the MONEY type with the number of digits greater than 19 (the MONEY type has a maximum precision of 32 digits). Also, Select returned unexpected negative values when the Insert inserted positive values.
The logic has been updated to normalize the decimal values after making it negative.