* martedì 21 dicembre 2004, alle 10:43, Nando Santagata scrive:
> Un passo indietro: in tutti i libri sul Perl, e in particolare sul
> Cookbook, viene indicato come metodo di arrotondamento di un numero in
> floating point questa sintassi:
>
> $round = sprintf "%.2", $number;
Non manca una "f" dopo il 2?
mizio@hal:~$ perl -e 'print sprintf("%.2", 1.004), "\n"'
%.2
mizio@hal:~$ perl -e 'print sprintf("%.2f", 1.004), "\n"'
1.00
;)
> per un arrotondamento a due decimali, ad esempio.
>
> Ho verificato sulle macchine che ho a disposizione che:
>
> perl -e 'print sprintf("%.2", 1.004), "\n"'
> 1.00
> perl -e 'print sprintf("%.2", 1.005), "\n"'
> 1.00
> perl -e 'print sprintf("%.2", 1.006), "\n"'
> 1.01
>
> Detto questo, il bug puo` essere del gcc, della libc, del perl o di
> chissa` cos'altro.
Pare proprio un baco di glibc, visto che con una precision diversa, si
comporta come "ci aspettiamo":
mizio@hal:~$ perl -e 'print sprintf("%.3f", 1.0051), "\n"'
1.005
mizio@hal:~$ perl -e 'print sprintf("%.3f", 1.0055), "\n"'
1.006
Sarebbe interessante sapere su altre distribuzioni, cosa succede, per
capire se e` deb-related (ma tenderei a dire che e` global).
--
Maurizio - Tannoiser - Lemmo
Founder Member of ERLUG http://erlug.linux.it
-------------------------------------------------------------------------------
Jayne: I needed to find some tape.
Simon: So you had to tear my infirmary apart?
Jayne: Apparently.
-- Jaynestown
|