Perl number

7 отговора 359 прегледа
#1

Perl number

Някой може ли да ми каже как в Perl мога да закръгля число до втория символ:


т.е. имам примерно

$num=21.341;

и резултата искам да е:

21.34

Благодаря предварително

Отговор
в отговор на jayd #2

Re: Perl number

използвай sprintf

$num = 21.341;

$num = sprintf("%.2f", $num);

# $num == 21.34
# perldoc -f psrintf

Отговор
в отговор на priest #3

Re: Perl number

Това не е закръгляване а резачка. В Perl няма функция за закръгляване, трябва сам да си я напишеш или google...

Отговор
в отговор на novobranec #4

Re: Perl number

напротив - има закръгляне - погледни следните функции:

ceil - This is identical to the C function "ceil()", returning the smallest integer value greater than or equal to the given numerical argument.
floor - This is identical to the C function "floor()", returning the largest integer value less than or equal to the numerical argument.
Core module POSIX

но явно, че тук потребителя иска точно "орязване", само че играта на думи ли е важна или крайния резултат?

Отговор
в отговор на jayd #5

Re: Perl number

use Number::Format qw(:subs);

$num=21.341;
$num=round($num, 2);

Отговор
в отговор на supremacy #6

Re: Perl number

Говорим за закръгляване на реални числа, не на цели. Ceil и Floor са за цели числа. Закръгляването в Perl се прави с проста собственоръчно написана функция или с външен модул (както е писал човека по-долу).

Отговор
в отговор на Jud #7

Re: Perl number

по принцип от математиката е добре известно, че
round(x)=floor(x+0.5)
тука закръглянето на x.5 е нагоре.
Примерно за закръгляне до 2 цифри след десетичната точка можем да умножим по 100:

ето го закръглянето:

floor(100*$x+0.5)/100

Отговор
в отговор на novobranec #8

Re: Perl number

Ceil и Floor са за цели числа. - tova go kaji avtora na POSIX module-a, shte nauchi neshta, koito ne e znael.
kak se syhranqvat chislata ot perl interpretatora spored teb?
sledniq kod kakvo ti govori?

perl -MPOSIX -e 'print floor(1.1234567)'
### output: 1
perl -MPOSIX -e 'print ceil(1.1234567)'
### output: 2


Отговор