Ricordate che int() si limita a troncare verso lo 0. Per arrotondare a un
qualche numero di decimali, la via più facile è di solito
sprintf() o printf().
printf("%.3f", 3.1415926535); # stampa 3.142
Il modulo POSIX (parte della distribuzione standard di Perl) implementa ceil(),
floor() e un certo numero di altre funzioni matematiche e trigonometriche.
use POSIX;
$ceil = ceil(3.5); # 4
$floor = floor(3.5); # 3
Nelle versioni dalla 5.000 alla 5.003 di Perl, la trigonometria veniva fatta
dal modulo Math::Complex. Con la versione 5.004, il modulo Math::Trig (parte
della distribuzione standard) implementa le funzioni trigonometriche. Usa
internamente il modulo Math::Complex e alcune funzioni potrebbero sfuggire
dall'asse dei reali verso il piano dei complessi, ad esempio il seno inverso
di 2.
L'arrotondamento può avere serie implicazioni nelle applicazioni
finanziarie, e il metodo di arrotondamento usato dovrebbe essere specificato
con cura. In questi casi, probabilmente è una buona idea non fidarsi
del sistema usato da Perl, qualunque esso sia, ma implementare la funzione di
arrotondamento per conto vostro.
Per vederne il motivo, notate come, anche con printf, resti un
problema di incertezza sui valori intermedi:
for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
0.8 0.8 0.9 0.9 1.0 1.0
Non prendetevela con Perl. In C è lo stesso. La IEEE dice che va fatto
così. In Perl, i numeri i cui valori assoluti sono interi inferiori
a 2**31 (sulle macchine a 32 bit) lavorano abbastanza similmente agli interi
in matematica. Per gli altri tipi di numeri non c'è garanzia.
|