2009-05-08 16 views
1

Ajout de 15 numéros de chiffres comme 999999999999990 en Perl produit des résultats avec une période tels que 1.9999999999999e+. Lorsque vous utilisez substr il produit encore 1.99999999999, et lors de l'utilisation BigInt le résultat a encore une période. Quelle est la syntaxe Perl correcte pour Perl 5.8.7 pour obtenir le résultat sans la période?Pourquoi ai-je un point décimal dans mes nombres BigInt?

use BigInt; 
$acct_hash = substr(($acct_hash + $data[1]),0,15); 

BigInt.pm -> /opt/perl5.8.7/lib/5.8.7/Math/BigInt.pm 
BigInt -> /opt/perl5.8.7/lib/5.8.7/Math/BigInt.pm 

Répondre

5

Utilisez le bigint pragma pour obtenir une utilisation transparente des Math::BigInt:

#!/usr/bin/perl 

use strict; 
use warnings; 


print 999999999999990 + 999999999999990, "\n"; 

use bigint; 

print 999999999999990 + 999999999999990, "\n"; 
+0

Salut, ce sont les erreurs: Variable "acct_hash $" est non importée à la ligne de s.pl 416. variable « $ acct_hash "n'est pas importé à la ligne s.pl 416. La variable" @data "n'est pas importée à la ligne 415 de la prim. Le symbole global" $ acct_hash "requiert un nom de module explicite à la ligne 416. Symbole global" $ acct_hash "nécessite un nom de paquet explicite à la ligne s.pl 416. Le symbole global "@data" requiert un nom de paquet explicite à la ligne 415 de la ligne s.pl BEGIN n'est pas sûr après les erreurs - compilation annulée à la ligne 417. Merci Chas –

+1

C'est le pragma strict qui dit que vous faites mal des choses. Vous pouvez supprimer le pragma strict pour laisser le script s'exécuter, mais les erreurs seront toujours dans votre code. Vous devez déclarer vos variables avant de les utiliser avec la fonction my: http://perldoc.perl.org/functions/my.html –

+0

Vous continuez à poser cette question et je n'arrive pas à comprendre comment vous répondre parce que je n'ai aucune idée pourquoi substr est pertinent ici. –