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