/ / Jak zaokrąglić do określonej liczby miejsc po przecinku w Perlu - perl, zmiennoprzecinkowe

Jak zaokrąglić do określonej liczby miejsc po przecinku w Perlu - perl, zmiennoprzecinkowe

Chciałbym zaokrąglić do N miejsca dziesiętne (dwa miejsca na centy). Na przykład

5.0166 => 5.01
0.933  => 0.93

sprintf zaokrągla do najbliższej cyfry, więc nie produkuje tego, czego chcę

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

Odpowiedzi:

5 dla odpowiedzi № 1

Użyj POSIX :: floor (http://perldoc.perl.org/POSIX.html):

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

Jeśli masz do czynienia z liczbami ujemnymi i wolisz raczej zejść w kierunku zera niż zaokrąglić w dół, użyj:

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

Lub tylko

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

2 dla odpowiedzi nr 2

Możesz zadzwonić, dzwoniąc do int wraz z mnożeniem i dzieleniem naprzesuwaj przecinek dziesiętny tam i z powrotem, lub możesz użyć zastępowania ciągu, jak pokazano poniżej, które będzie działać dla niczego mniej niż 1E15 i więcej niż 1E-4

To zadziała

use strict;
use warnings;
use 5.010;

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

wydajność

5.01
0.93

0 dla odpowiedzi № 3

Korzystanie z kolejnych linii do pokazania kroków.

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