Por que o sprintf de Perl não roda números de ponto flutuante corretamente?

Eu estava procurando a convenção de arredondamento usada pela função interna do Perlsprintf.

Eu estava pensando que ele faz um arredondamento normal (por exemplo, ROUND_HALF_UP como emConvenção do modo de arredondamento de Java), mas cavar ainda mais provou que isso é errado:

> /usr/local/bin/perl5.10.1 -e 'print(sprintf("%.2f", shift @ARGV)."\n");' 0.335
0.34
> /usr/local/bin/perl5.10.1 -e 'print(sprintf("%.2f", shift @ARGV)."\n");' 1.335
1.33

questionAnswers(2)

yourAnswerToTheQuestion