/ / Як ви можете округлити до заданої кількості десяткових знаків у Perl-perl, з плаваючою точкою

Як ви можете округлити до заданої кількості десяткових знаків у Perl-perl, з плаваючою точкою

Мені хочеться круглити донизу N десяткові знаки (два місця за центи). Наприклад

5.0166 => 5.01
0.933  => 0.93

sprintf рази до найближчої цифри, тому не виробляє те, що я хочу. Наприклад

sprintf("%.2f", 5.0166) => 5.02

Відповіді:

5 за відповідь № 1

Використовуйте POSIX :: floor (http://perldoc.perl.org/POSIX.html):

use POSIX;
$original = 5.0166;
$rounded = POSIX::floor($original*100)/100;
print "$roundedn";

Якщо ви маєте справу з негативними числами, а ви скористаєтесь круглим напрямком до нуля, а не округленням, скористайтеся:

$rounded = ($original < 0)?(POSIX::ceil($original*100)/100)
:(POSIX::floor($original*100)/100);

або просто

$rounded = int($original*100)/100;

2 для відповіді № 2

Ви можете зіпсуватись зателефонувати int разом з множенням і розподілом назсуньте десяткову точку вперед та назад, або ви можете використовувати рядок підстановки, як показано нижче, що буде працювати на щось менше, ніж 1Е15 і більше 1Е-4

Це буде працювати

use strict;
use warnings;
use 5.010;

for (5.0166, 0.933) {
say s/.ddK.+//r;
}

вихід

5.01
0.93

0 для відповіді № 3

Використовуйте більше рядків, щоб показати кроки.

$x=5.0166;
$y=int($x*100);
$y=$y/100;
print "$yn";