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

Discussion in 'Perl Misc' started by SamL, Mar 9, 2009.

1. ### SamLGuest

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

SamL, Mar 9, 2009

2. ### SamLGuest

On Mar 9, 3:04 pm, Ben Morrow <> wrote:
> Quoth SamL <>:
>
> > 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);

SamL, Mar 9, 2009

3. ### smallpondGuest

On Mar 9, 5:05 pm, SamL <> wrote:
> On Mar 9, 3:04 pm, Ben Morrow <> wrote:
>
> > Quoth SamL <>:

>
> > > 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

smallpond, Mar 9, 2009
4. ### Peter J. HolzerGuest

On 2009-03-09 21:26, smallpond <> wrote:
> On Mar 9, 5:05 pm, SamL <> wrote:
>> On Mar 9, 3:04 pm, Ben Morrow <> wrote:
>>
>> > Quoth SamL <>:

>>
>> > > 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

Peter J. Holzer, Mar 9, 2009
5. ### SamLGuest

On Mar 9, 6:29 pm, "Peter J. Holzer" <> wrote:
> On 2009-03-09 21:26, smallpond <> wrote:> On Mar 9, 5:05 pm, SamL <> wrote:
> >> On Mar 9, 3:04 pm, Ben Morrow <> wrote:

>
> >> > Quoth SamL <>:

>
> >> > > 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.

SamL, Mar 9, 2009