You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Sean Gilligan (JIRA)" <ji...@apache.org> on 2015/09/28 10:58:04 UTC

[jira] [Created] (GROOVY-7608) Comparison of decimal subclasses of Number with == fails

Sean Gilligan created GROOVY-7608:
-------------------------------------

             Summary: Comparison of decimal subclasses of Number with == fails
                 Key: GROOVY-7608
                 URL: https://issues.apache.org/jira/browse/GROOVY-7608
             Project: Groovy
          Issue Type: Bug
          Components: groovy-runtime
    Affects Versions: 2.4.4
            Reporter: Sean Gilligan


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.

{code}
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!
{code}

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 implementation so {{NumberValue}} in JSR354 aka *JavaMoney*.

I can provide some test cases for this if needed and am interesting in working to contribute a fix.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)