【发布时间】:2020-06-13 02:39:06
【问题描述】:
我需要得到最接近的数字 $new 到 $orig 可被 $divisor 整除。 $new 应大于 $orig。所以我提出了以下公式(希望它没有错误):
$new = $orig + ($divisor - $orig % $divisor)
现在,$orig 数字是一个整数,最多有 30 位数字。我想使用Math::BigInt 将其实现为 Perl 函数,但输出非常错误。
use Math::BigInt;
Math::BigInt->accuracy(60);
Math::BigInt->precision(60);
my $orig = Math::BigInt->new('5967920747812842369477355441'); # A
my $divisor = Math::BigInt->new('719'); # B
my $modulo = $orig->bmod($divisor); # A % B = M
my $diff = $divisor->bsub($modulo); # B - M = D
my $new = $orig->badd($diff); # A + D = N
my $test = $new->bdiv($divisor); # N / B = 0
print("orig : $orig\n"); # 10; should be: 5967920747812842369477355441
print("modulo : $modulo\n"); # 10; should be: 648
print("diff : $diff\n"); # 71; should be: 71
print("new : $new\n"); # 10; should be: 5967920747812842369477355512
print("test : $test\n"); # 10; should be: 0
【问题讨论】: