http://qs1969.pair.com?node_id=324673


in reply to Number::Spell

This is an issue with Perl, not with this module. Huge numbers get converted to floats automatically by Perl. You can't convert back, as you suggest, because you've lost accuracy:
$ perl -e 'print 10000000000000001, $/' 1e+16 $ perl -e 'print 10000000000000005, $/' 1e+16 $ perl -e 'print 10000000000000000, $/' 1e+16
You will find that every module on CPAN that needs to deal with integers this big either (A) requires you to pass the number as a string, or (B) uses Math::BigInt or similar, to prevent Perl from converting the integer to a float. Even notice from Math::BigInt's pod:
Scalars holding numbers may also be passed, but note that non-integer +numbers may already have lost precision due to the conversation to float. Quot +e your input if you want BigInt to see all the digits: $x = Math::BigInt->new(12345678890123456789); # bad $x = Math::BigInt->new('12345678901234567890'); # good

blokhead