2013-05-27 4 views
2

Из того, что я понимаю, прочитав документацию Math::BigFloat, следующий код должен быть округлен до номера, но он, похоже, не работает.Round up a Math :: BigFloat number

#!/usr/bin/perl 

use strict; 
use warnings; 
use Math::BigFloat; 

my $x = Math::BigFloat->new('2.3'); 
$x->ffround(0, '+inf'); 
print "$x\n"; # -> 2 

Что я должен сделать для того, чтобы всегда округляет числа до и, например, в этом примере получить номер 3 в качестве выходного сигнала.

+0

Что является вторым аргументом 'ffround' должен делать? В документации это не упоминается. – choroba

+0

Из связанной документации: все функции округления принимают в качестве второго параметра режим округления от одного из следующих: «четный», «нечетный», «+ inf», «-inf», «ноль», «trunc» или « общий. –

+0

Aha! '$ x-> bceil()' работает так, как я ожидал. Тем не менее, было бы неплохо, если кто-то может прояснить использование режимов округления в 'ffround'. –

ответ

5

режим округления влияет только на поведение, если округление от точно на полпути между двумя возможными результатами:

#!/usr/bin/perl 
use warnings; 
use strict; 

use Math::BigFloat; 

my $n = Math::BigFloat->new('2.5'); 

print $n->copy->ffround(1, 'zero');   # 2 
print $n->copy->ffround(1, '+inf');   # 3 
print $n->copy->ffround(1, 'odd');   # 3 
print $n->copy->ffround(1, 'even');   # 2 

что вы хотите bceil:

my $m = Math::BigFloat->new('2.3'); 

print $m->copy->bceil();      # 3