我想要向下舍入到 N 小数位(两分钱的分数)。例如
5.0166 => 5.01
0.933 => 0.93
sprintf
向最接近的数字舍入,因此不能产生我想要的数字。例如
sprintf("%.2f", 5.0166) => 5.02
答案 0 :(得分:5)
使用POSIX :: floor(http://perldoc.perl.org/POSIX.html):
use POSIX;
$original = 5.0166;
$rounded = POSIX::floor($original*100)/100;
print "$rounded\n";
如果你处理负数并且你宁愿向零舍入而不是向下舍入,那么使用:
$rounded = ($original < 0)?(POSIX::ceil($original*100)/100)
:(POSIX::floor($original*100)/100);
或只是
$rounded = int($original*100)/100;
答案 1 :(得分:2)
您可以混淆调用int
以及乘法和除法来来回移动小数点,或者您可以使用字符串替换,如下所示,这将适用于小于1E15的任何内容大于1E-4
这将有效
use strict;
use warnings;
use 5.010;
for (5.0166, 0.933) {
say s/\.\d\d\K.+//r;
}
<强>输出强>
5.01
0.93
答案 2 :(得分:0)
使用更多行显示步骤。
$x=5.0166;
$y=int($x*100);
$y=$y/100;
print "$y\n";