/ / ¿Cómo se puede redondear a un número dado de decimales en Perl? Perl, punto flotante

¿Cómo se puede redondear a un número dado de decimales en Perl - perl, coma flotante?

Me gustaría redondear a norte Decimales (dos lugares por centavos). Por ejemplo

5.0166 => 5.01
0.933  => 0.93

sprintf redondea al dígito más cercano para que no produzca lo que quiero. Por ejemplo,

sprintf("%.2f", 5.0166) => 5.02

Respuestas

5 para la respuesta № 1

Utilice POSIX :: piso (http://perldoc.perl.org/POSIX.html)

use POSIX;
$original = 5.0166;
$rounded = POSIX::floor($original*100)/100;
print "$roundedn";

Si trata con números negativos y se "redondea" hacia cero en lugar de redondear hacia abajo, entonces use:

$rounded = ($original < 0)?(POSIX::ceil($original*100)/100)
:(POSIX::floor($original*100)/100);

o solo

$rounded = int($original*100)/100;

2 para la respuesta № 2

Puedes meterte con una llamada a int junto con la multiplicación y división adesplace el punto decimal hacia adelante y hacia atrás, o puede usar una sustitución de cadena, como se muestra a continuación, que funcionará para cualquier cosa menor que 1E15 y mayor que 1E-4

Esto funcionara

use strict;
use warnings;
use 5.010;

for (5.0166, 0.933) {
say s/.ddK.+//r;
}

salida

5.01
0.93

0 para la respuesta № 3

Usando más líneas para mostrar los pasos.

$x=5.0166;
$y=int($x*100);
$y=$y/100;
print "$yn";