首页 > 解决方案 > 如何将 4.44445 舍入到 4.45?

问题描述

有谁知道这个模块不是二进制的,而是下一个:

4.444435 -> 4.44
4.444445 -> 4.45
4.445444 -> 4.45
4.443000 -> 4.44

, sprintf,不能那样做 = Math::BigFloat(Math::BigRat

标签: perlrounding

解决方案


我仍然不明白规则是如何工作的,但是使用bfroundMath ::BigFloat可能会返回你想要的。

#!/usr/bin/perl
use warnings;
use feature qw{ say };

use Math::BigFloat;

sub myround {
    my $bi = 'Math::BigFloat'->new("$_[0]");
    for (my $l = length $bi; $l > 1; --$l) {
        $bi->bfround(-$l, '+inf');
    }
    $bi
}

use Test::More tests => 8;

is myround(4.444435), 4.44;
is myround(4.444445), 4.45;
is myround(4.445444), 4.45;
is myround(4.443000), 4.44;

is myround(3.554444), 3.55;
is myround(3.554445), 3.56;
is myround(3.544445), 3.55;
is myround(3.555550), 3.56;

推荐阅读