Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.4
-
None
Description
If I create a subclass of Number that is implemented internally with a decimal value, e.g. using a BigDecimal even if I implement compareTo(), Groovy will convert my numbers to Integer before comparison.
given: def one = MyNumberSubclass.of(1) def oneptone = MyNumberSubclass.of(1.1) then: one == onptone // passes when it shouldn't! oneptone == oneptone // fails when it shouldn't!
This is a critical issue for anyone creating a DSL that has custom numeric types (e.g. for currency handling) and wants to compare them with ==.
Specifically this problem occurs with implementations of NumberValue in JSR354 aka JavaMoney.
I can provide some test cases for this if needed and am interesting in working to contribute a fix.
Attachments
Issue Links
- is related to
-
GROOVY-7636 NumberMath.getMath suboptimal choice for custom Numbers
- Closed
- relates to
-
GROOVY-2756 create new user overwritable operator methods for <,==,>,<=,=>,<==>
- Open