Pregunta

¿Hay una manera de establecer la precisión de coma flotante de un script Perl (3 dígitos), sin tener que cambiar de manera específica para cada variable?

Algo similar a TCL de:

global tcl_precision
set tcl_precision 3
¿Fue útil?

Solución

No hay manera de cambiar globalmente esto.

Si es sólo para fines de presentación a continuación, utilizar sprintf("%.3f", $value);.

Para los propósitos matemáticos, usar (int(($value * 1000.0) + 0.5) / 1000.0). Esto funcionaría para los números positivos. Usted tendría que cambiar para que funcione con números negativos sin embargo.

Otros consejos

Utilice Math::BigFloat o bignum :

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

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

O con bignum en lugar de hacer:

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

A continuación, en ambos casos:

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

No recomendaría utilizar sprintf ( "%. 3f", el valor de $).

Por favor, mira el siguiente ejemplo: (6,02 * 1,25 = 7,525)

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

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

Trate el resultado como una cadena y usar substr . De esta manera:

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

Si usted quiere hacer el redondeo, hacerlo como cadena también. Acaba de obtener el siguiente carácter y decidir.

O puede utilizar el siguiente truncar lo que viene después del tercer dígito después del punto decimal:

if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
    $val = $1;  
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top