2012-12-31 16 views
5
my $num = log(1_000_000)/log(10); 
print "num: $num\n"; 
print "int(num): " . int($num) . "\n"; 
print "sprintf(num): " . sprintf("%0.16f", $num) . "\n"; 

produce:A che precisione stampa Perl i numeri in virgola mobile?

num: 6 
int(num): 5 
sprintf(num): 5.9999999999999991 

Fino a che la precisione fa perl stampa numeri in virgola mobile?

Uso: v5.8.8 costruita per x86_64-linux-thread-multi

+0

no '5,8' !!! Stop!!! è strano qualche volta. usa '5.10' o superiore – gaussblurinc

risposta

9

Quando stringifying numeri in virgola mobile, se stampare o altrimenti, Perl utilizza generalmente il valore di DBL_DIG o LDBL_DIG dal float.h o limiti .h file in cui è stato compilato.

Questa è in genere la precisione del tipo a virgola mobile che perl utilizzerà arrotondato per difetto. Ad esempio, se si utilizza un tipico tipo doppio, la precisione è 53 bit = 15,95 cifre e Perl di solito si stringe con 15 cifre di precisione.

Problemi correlati