groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "corneil.duplessis@gmail.com" <corneil.duples...@gmail.com>
Subject Re: Math errors converting Long to BigDecimal
Date Thu, 10 Sep 2015 20:26:22 GMT
Try adding L to your long constants.
I ran into a similar problem the other days where my calculation of date
difference in milliseconds produced an overflow and a negative number.

assert 100000000000000016L == (({ BigDecimal it ->
it})(100000000000000010L))


[image: --]
Corneil du Plessis
[image: https://]about.me/corneil
<https://about.me/corneil?promo=email_sig>

On 10 September 2015 at 22:15, Sean Gilligan <sean@msgilligan.com> wrote:

> A one line assert which PASSES and shouldn't:
>
> assert 100000000000000016 == (({ BigDecimal it -> it})(100000000000000010))
>
>
> More detail (all asserts pass):
>
> def val = 100000000000000010
> assert val.class == Long
> def closure = { BigDecimal it -> it}
> def bdVal = closure(val)
> assert bdVal.class == BigDecimal
> assert bdVal == 100000000000000016
> def bdCastVal = (BigDecimal) val
> assert bdCastVal.class == BigDecimal
> assert bdCastVal == 100000000000000010
>
> So, converting to BigDecimal with a cast or with an `as` seems to work.
> But having Groovy do it automatically for a function or closure
> parameter fails.
>
> Am I missing something? Is this a known issue?
>
> Thanks,
>
> Sean
>
>
>

Mime
View raw message