Вас укусил тот факт, что числа с плавающей запятой не являются точными представлениями десятичных дробей. Вот что я получаю:
DB<1> $a=0.335
DB<5> print sprintf("%.19f",$a)
0.3350000000000000200
DB<7> $b=1.335
DB<8> print sprintf("%.19f",$b)
1.3349999999999999645
DB<9>
Поскольку 0,335 внутренне представляется немного большим, чем 0,335, оно округляется до 0,34, в то время как 1,335 немного меньше, чем 1,335, поэтому округляется до 1,33.