You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by OCsite <oc...@ocs.cz> on 2025/08/19 16:11:47 UTC

the BigDecimal g/G suffix?

Hi there,

I've just bumped into https://groovy-lang.org/syntax.html#_number_type_suffixes, namely, to

BigDecimal

G or g


which seems rather pointless to me. When one enters a decimal number (e.g., 1.0), it's a BD anyway, suffix or not. On the other hand, there seems to be no suffix which would allow to write e.g., just 1s (s for something) creating a 1 BD, which would make some sense, like e.g., 1f for float does.

What do I overlook? What's the point of the BD g/G suffix, and why there's no suffix which would work without a decimal point (or exponent)?

Thanks,
OC


Re: the BigDecimal g/G suffix?

Posted by MG <mg...@arscreat.com>.
Hi OC,

 1. not everyone that uses Groovy might be aware that a floting point
    number literal will automatically be a BD, so supporting g/G suffix
    makes total sense to let a user rest assured on what he will get.
 2. In addition, sometimes one wants to express in code that one is
    aware of something, in this case that a number literal is a BD,
    which again the suffix let's you express that.
 3. And finally, to me at least, supporting g/G even if it is
    syntactically speaking superfluous, is exactly what makes a language
    consistent.
 4. What I can see, is that one could want an option to directly express
    that a given integer literal shall be treated as a BD, without going
    through the rather ugly 1G.toBigDecimal()
     1. Which imho is also clearly worse than 1.0G .
     2. However, as this might lead to clashes with potential future
        Java suffixes I think it would be hard to come up with a good
        candidate (?)
         1. Which poses the question whether it would be worth the effort...

Cheers,
mg

Am 20.08.2025 um 04:39 schrieb OCsite:
> Thanks for the quick reply!
>
> Well primarily I don't get the point of the existence of the BD g/G 
> suffix at all. So that it works, the number before needs to contain . 
> or e; but if so, the number is a BD anyway even without the suffix. Is 
> there /any/ case where the g/G BD suffix wouldn't be completely 
> superfluous and adding/removing it would change the code behaviour in 
> the slightest?
>
> Aside of that, there is a /very minute/ and /completely unimportant/ 
> limitation that when I happen to need a BD constant whose value 
> happens to be integral (eg., 1 or 666), there is (far as I know) no 
> way to express it with a suffix in a format 1x, 666x (where x would be 
> the suffix). That's somewhat inconsistent with other cases, e.g., 1f, 
> 666f when the type I happen to need is a float.
>
> Nevertheless of course adding “.0” to get a BD is trivial and works 
> reliably, thus it's really just a question of consistency, nothing else :)
>
> Thanks and all the best,
> OC
>
>> On 20. 8. 2025, at 3:46, Paul King <pa...@asert.com.au> wrote:
>>
>> 1g or 1G gives a BigInteger and here the suffix is required to not 
>> get an Integer. Using 1.0g/G for BD seems a natural extension.
>>
>> Most expressions involving both BI and BD give the results you'd 
>> expect so I believe it was thought at the time that using the same 
>> suffix was sufficient, with toBigInteger() and toBigDecimal() 
>> allowing you to swap between them if really needed.
>>
>> Do you have a particular scenario that you find that the current 
>> conventions limit you, or are you just noticing the trade-offs that 
>> were made in this case and making sure you fully understand them?
>>
>> Paul.
>>
>>
>> On Wed, Aug 20, 2025 at 2:13 AM OCsite <oc...@ocs.cz> wrote:
>>
>>     Hi there,
>>
>>     I've just bumped into
>>     https://groovy-lang.org/syntax.html#_number_type_suffixes, namely, to
>>
>>     BigDecimal
>>
>>     	
>>
>>     |G| or |g|
>>
>>
>>     which seems rather pointless to me. When one enters a decimal
>>     number (e.g., 1.0), it's a BD anyway, suffix or not. On the other
>>     hand, there seems to be no suffix which would allow to write
>>     e.g., just 1s (s for /something/) creating a 1 BD, which would
>>     make some sense, like e.g., 1f for float does.
>>
>>     What do I overlook? What's the point of the BD g/G suffix, and
>>     why there's no suffix which would work without a decimal point
>>     (or exponent)?
>>
>>     Thanks,
>>     OC
>>
>

Re: the BigDecimal g/G suffix?

Posted by OCsite <oc...@ocs.cz>.
Thanks for the quick reply!

Well primarily I don't get the point of the existence of the BD g/G suffix at all. So that it works, the number before needs to contain . or e; but if so, the number is a BD anyway even without the suffix. Is there any case where the g/G BD suffix wouldn't be completely superfluous and adding/removing it would change the code behaviour in the slightest?

Aside of that, there is a very minute and completely unimportant limitation that when I happen to need a BD constant whose value happens to be integral (eg., 1 or 666), there is (far as I know) no way to express it with a suffix in a format 1x, 666x (where x would be the suffix). That's somewhat inconsistent with other cases, e.g., 1f, 666f when the type I happen to need is a float.

Nevertheless of course adding “.0” to get a BD is trivial and works reliably, thus it's really just a question of consistency, nothing else :)

Thanks and all the best,
OC

> On 20. 8. 2025, at 3:46, Paul King <pa...@asert.com.au> wrote:
> 
> 1g or 1G gives a BigInteger and here the suffix is required to not get an Integer. Using 1.0g/G for BD seems a natural extension.
> 
> Most expressions involving both BI and BD give the results you'd expect so I believe it was thought at the time that using the same suffix was sufficient, with toBigInteger() and toBigDecimal() allowing you to swap between them if really needed.
> 
> Do you have a particular scenario that you find that the current conventions limit you, or are you just noticing the trade-offs that were made in this case and making sure you fully understand them?
> 
> Paul.
> 
> 
> On Wed, Aug 20, 2025 at 2:13 AM OCsite <ocs@ocs.cz <ma...@ocs.cz>> wrote:
>> Hi there,
>> 
>> I've just bumped into https://groovy-lang.org/syntax.html#_number_type_suffixes, namely, to
>> 
>> BigDecimal
>> 
>> G or g
>> 
>> 
>> which seems rather pointless to me. When one enters a decimal number (e.g., 1.0), it's a BD anyway, suffix or not. On the other hand, there seems to be no suffix which would allow to write e.g., just 1s (s for something) creating a 1 BD, which would make some sense, like e.g., 1f for float does.
>> 
>> What do I overlook? What's the point of the BD g/G suffix, and why there's no suffix which would work without a decimal point (or exponent)?
>> 
>> Thanks,
>> OC
>> 


Re: the BigDecimal g/G suffix?

Posted by Paul King <pa...@asert.com.au>.
1g or 1G gives a BigInteger and here the suffix is required to not get an
Integer. Using 1.0g/G for BD seems a natural extension.

Most expressions involving both BI and BD give the results you'd expect so
I believe it was thought at the time that using the same suffix was
sufficient, with toBigInteger() and toBigDecimal() allowing you to swap
between them if really needed.

Do you have a particular scenario that you find that the current
conventions limit you, or are you just noticing the trade-offs that were
made in this case and making sure you fully understand them?

Paul.


On Wed, Aug 20, 2025 at 2:13 AM OCsite <oc...@ocs.cz> wrote:

> Hi there,
>
> I've just bumped into
> https://groovy-lang.org/syntax.html#_number_type_suffixes, namely, to
>
> BigDecimal
>
> G or g
>
> which seems rather pointless to me. When one enters a decimal number
> (e.g., 1.0), it's a BD anyway, suffix or not. On the other hand, there
> seems to be no suffix which would allow to write e.g., just 1s (s for
> *something*) creating a 1 BD, which would make some sense, like e.g., 1f
> for float does.
>
> What do I overlook? What's the point of the BD g/G suffix, and why there's
> no suffix which would work without a decimal point (or exponent)?
>
> Thanks,
> OC
>
>