Почему sprintf в Perl неправильно округляет числа с плавающей точкой?

Я искал соглашение о округлении, используемое встроенной функцией PerlSprintf.

Я думал, что это делает нормальное округление (например, ROUND_HALF_UP как вСоглашение о режиме округления в Java), но копание дальше доказало, что это неправильно:

> /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

Ответы на вопрос(2)

Ваш ответ на вопрос