Question

Y at-il un moyen de définir la précision en virgule flottante (à 3 chiffres) d'un script Perl, sans avoir à changer spécifiquement pour chaque variable?

Quelque chose de semblable à TCL de:

global tcl_precision
set tcl_precision 3
Était-ce utile?

La solution

Il n'y a aucun moyen de modifier globalement cela.

S'il est juste à des fins d'affichage puis utilisez sprintf("%.3f", $value);.

Pour des raisons mathématiques, utilisez (int(($value * 1000.0) + 0.5) / 1000.0). Cela fonctionnerait pour les nombres positifs. Vous auriez besoin de changer pour travailler avec des nombres négatifs cependant.

Autres conseils

Utilisez Math::BigFloat ou bignum :

use Math::BigFloat;
Math::BigFloat->precision(-3);

my $x = Math::BigFloat->new(1.123566);
my $y = Math::BigFloat->new(3.333333);

Ou avec bignum plutôt faire:

use bignum ( p => -3 );
my $x = 1.123566;
my $y = 3.333333;

Ensuite, dans les deux cas:

say $x;       # => 1.124
say $y;       # => 3.333
say $x + $y;  # => 4.457

Je recommande de ne pas utiliser sprintf ( "%. 3F", valeur $).

S'il vous plaît regarder l'exemple suivant: (6,02 * 1,25 = 7,525)

printf("%.2f", 6.02 * 1.25) = 7.52

printf("%.2f", 7.525) = 7.53

Traiter le résultat comme une chaîne et utiliser substr . Comme ceci:

$result = substr($result,0,3);

Si vous voulez faire l'arrondi, faites-le en tant que chaîne aussi. Procurez-vous le caractère suivant et décider.

Ou vous pouvez utiliser ce qui suit pour tronquer tout ce qui vient après le troisième chiffre après la virgule:

if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
    $val = $1;  
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top