我使用sprintf和printf函数来舍入十进制数,如果第100个位置小于5,则向下舍入,如果第100个位置大于5,则向上舍入。
my $a = 1.12;
my $b = sprintf("%.1f", $a);
print "Unrounded: $a\nRounded: $b\n";
printf "Unrounded: $a\nRounded: %.1f\n", $a;
有没有办法将小数点向上舍入(例如$b = 1.2
)?
答案 0 :(得分:2)
您可以使用核心ceil
模块中的POSIX
函数向上舍入到下一个整数。在操作之前和之后将您的值乘以10的幂,以向上舍入到给定的小数位数
另外,请勿使用标识符$a
和$b
;它们保留供sort
内置运算符
use strict;
use warnings 'all';
use POSIX 'ceil';
my $aa = 1.12;
print "Unrounded: $aa\n";
my $bb = sprintf("%.1f", $aa);
print "Rounded: $bb\n";
my $cc = ceil($aa * 10) / 10;
print "Rounded up: $cc\n";
Unrounded: 1.12
Rounded: 1.1
Rounded up: 1.2
答案 1 :(得分:1)
您可以使用nhimult()
库中的Math::Round
功能
nhimult TARGET,LIST
返回LIST中数字的下一个更高倍数。目标必须是积极的。在标量上下文中,返回单个值;在列表上下文中,返回值列表。在目标的两倍数之间的数字将被调整到代数更高的LIST的最接近的倍数。例如:
只需nhimult(0.1, $a)
作为
#!/usr/bin/perl
use Math::Round qw( :all );
my $a = 1.12;
my $b = sprintf("%.1f", $a);
print "Unrounded: $a\nRounded: $b\n";
printf "Unrounded: $a\nRounded: %.1f\n", $a;
printf "Unrounded: $a\nRounded: %.1f\n", $a;
printf "Next higher multiple of $a: %.1f\n", nhimult(0.1, $a);
产生
Unrounded: 1.12
Rounded: 1.1
Unrounded: 1.12
Rounded: 1.1
Unrounded: 1.12
Rounded: 1.1
Next higher multiple of 1.12, 1.2
您可以通过
获取Math::Roundperl -MCPAN -e 'install Math::Round'
并导入所有函数qw(:all)
。