From: | Dmitry Dolgov <9erthalion6(at)gmail(dot)com> |
---|---|
To: | Andrew Gierth <andrew(at)tao11(dot)riddles(dot)org(dot)uk> |
Cc: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Unsigned 64 bit integer to numeric |
Date: | 2019-12-04 19:25:37 |
Message-ID: | 20191204192537.nbhjnvtcz4b2brub@localhost |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> On Wed, Dec 04, 2019 at 11:49:20AM +0000, Andrew Gierth wrote:
>
> >>>>> "Dmitry" == Dmitry Dolgov <9erthalion6(at)gmail(dot)com> writes:
>
> Dmitry> Hi,
>
> Dmitry> Probably a simple question, but I don't see a simple answer so
> Dmitry> far. In one extension I want to convert uint64 into a numeric
> Dmitry> to put it eventually into a jsonb object. As far as I see in
> Dmitry> numeric.c there are functions only for signed int64. Is there a
> Dmitry> way to achive this with uint64 (without duplicating significant
> Dmitry> part of numeric implementation in the extension)?
>
> Sure. Flip the top bit; convert the value as if signed; then subtract
> -(2^63) from the result. (Easier to subtract -(2^63) than to add 2^63,
> since the former can itself be represented in a signed int64 for easy
> conversion to numeric.)
Indeed, looks like this does the trick, thank you!
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2019-12-04 19:43:32 | Re: Why JIT speed improvement is so modest? |
Previous Message | Robert Haas | 2019-12-04 19:24:16 | Re: [HACKERS] Block level parallel vacuum |