2010-07-26 13 views
6

Perché il primo esempio stampa un risultato errato?Domanda operatore modulo Perl

perl -le 'print $x = 100*1.15 % 5' 
4 
perl -le 'print $x = 1000*1.15 % 5' 
0 
+1

Questo accade anche in PHP. Python dice che è 5.0 (yep,% 5 = 5.0) – NullUserException

+0

@NullUserException: tnanks. Python Shell è buono per testare i risultati dei numeri float aritmetici :-) –

+0

Quindi è rubino. Ruby mi dice che è 4.999999 – NullUserException

risposta

9

È a causa dell'aritmetica in virgola mobile.

print $x = int(100*1.15); 

Ti dà 114.

5

arrotondamento. Tieni presente che i computer non possono rappresentare perfettamente le posizioni decimali effettive - si avvicinano. Sul mio computer, perl -le 'print $x = (100*1.15)-115' dà il risultato -1.4210854715202e-14, il che significa che 100*1.15 è quasi, ma non del tutto, 115.