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 № 1Utilice 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";