Velocity Reviews > Perl > How to convert a floating point number to a 64 bit integer?

# How to convert a floating point number to a 64 bit integer?

SamL
Guest
Posts: n/a

 03-09-2009
I need to convert a floating point number to a 64 bit integer (long
long). How to do that in perl? Thanks.

SamL
Guest
Posts: n/a

 03-09-2009
On Mar 9, 3:04*pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth SamL <slsam...@gmail.com>:
>
> > I need to convert a floating point number to a 64 bit integer (long
> > long). How to do that in perl? Thanks.

>
> You will need to specify a little more about where these numbers are
> coming from. Probably you want perldoc -f pack.
>
> Ben

The number comes from calculation. For example:

my \$a = 2.0**37;

Here I cannot use 2**37 directly since the result is -1.

I have found a way to "convert" it although I think there should be a
better way:

my \$b = sprintf ("%.0f", \$a);

smallpond
Guest
Posts: n/a

 03-09-2009
On Mar 9, 5:05 pm, SamL <slsam...@gmail.com> wrote:
> On Mar 9, 3:04 pm, Ben Morrow <b...@morrow.me.uk> wrote:
>
> > Quoth SamL <slsam...@gmail.com>:

>
> > > I need to convert a floating point number to a 64 bit integer (long
> > > long). How to do that in perl? Thanks.

>
> > You will need to specify a little more about where these numbers are
> > coming from. Probably you want perldoc -f pack.

>
> > Ben

>
> The number comes from calculation. For example:
>
> my \$a = 2.0**37;
>
> Here I cannot use 2**37 directly since the result is -1.
>
> I have found a way to "convert" it although I think there should be a
> better way:
>
> my \$b = sprintf ("%.0f", \$a);

use bigint;
\$a = 2.0**37;
print int(\$a),"\n";

137438953472

Peter J. Holzer
Guest
Posts: n/a

 03-09-2009
On 2009-03-09 21:26, smallpond <> wrote:
> On Mar 9, 5:05 pm, SamL <slsam...@gmail.com> wrote:
>> On Mar 9, 3:04 pm, Ben Morrow <b...@morrow.me.uk> wrote:
>>
>> > Quoth SamL <slsam...@gmail.com>:

>>
>> > > I need to convert a floating point number to a 64 bit integer (long
>> > > long). How to do that in perl? Thanks.

>>
>> > You will need to specify a little more about where these numbers are
>> > coming from. Probably you want perldoc -f pack.

>>

That was my interpretation of the question, too. But it seems I was
mistaken.

>> The number comes from calculation. For example:
>>
>> my \$a = 2.0**37;
>>
>> Here I cannot use 2**37 directly since the result is -1.
>>
>> I have found a way to "convert" it although I think there should be a
>> better way:
>>
>> my \$b = sprintf ("%.0f", \$a);

The result of this is a string, not a 64 bit integer.

> use bigint;
> \$a = 2.0**37;
> print int(\$a),"\n";
>
> 137438953472

And the result of this is a bigint, which is also not the same as a 64
bit integer.

Perl can also be compiled to use 64 bit integers on most platforms.

But the real question is: What is the 64 bit integer for? Until
this is known, there is no way to tell whether a real 64 bit int is
needed or string or a bigint (or
maybe even a float) can be used instead.

hp

SamL
Guest
Posts: n/a

 03-09-2009
On Mar 9, 6:29*pm, "Peter J. Holzer" <hjp-usen...@hjp.at> wrote:
> On 2009-03-09 21:26, smallpond <smallp...@juno.com> wrote:> On Mar 9, 5:05 pm, SamL <slsam...@gmail.com> wrote:
> >> On Mar 9, 3:04 pm, Ben Morrow <b...@morrow.me.uk> wrote:

>
> >> > Quoth SamL <slsam...@gmail.com>:

>
> >> > > I need to convert a floating point number to a 64 bit integer (long
> >> > > long). How to do that in perl? Thanks.

>
> >> > You will need to specify a little more about where these numbers are
> >> > coming from. Probably you want perldoc -f pack.

>
> That was my interpretation of the question, too. But it seems I was
> mistaken.
>
> >> The number comes from calculation. For example:

>
> >> my \$a = 2.0**37;

>
> >> Here I cannot use 2**37 directly since the result is -1.

>
> >> I have found a way to "convert" it although I think there should be a
> >> better way:

>
> >> my \$b = sprintf ("%.0f", \$a);

>
> The result of this is a string, not a 64 bit integer.
>
> > use bigint;
> > \$a = 2.0**37;
> > print int(\$a),"\n";

>
> > 137438953472

>
> And the result of this is a bigint, which is also not the same as a 64
> bit integer.
>
> Perl can also be compiled to use 64 bit integers on most platforms.
>
> But the real question is: What is the 64 bit integer for? Until
> this is known, there is no way to tell whether a real 64 bit int is
> needed or *string or a bigint (or
> maybe even a float) can be used instead.
>
> * * * * hp

Sorry, I did not make it clear. Actually I just need a string which is
the result of 2.0**37. So the simplest solution, as Ben said, is

perl -le'print 2.0**37'

That solved my problem. Thanks.