@nospor Rzutowanie w ten sposób nie zadziała, albo raczej zadziała zbyt dobrze, bo dla 3.1, 3.2 itd. również. Problemem jest precyzja liczb zmiennoprzecinkowych, a rozwiązaniem może być funkcja number_format():
}
Rzutowanie w drugą stronę również nie przyniesie rezultatu, bo z (float) 3 otrzymamy po prostu 3. Natomiast od naszego $i będzie się to różnić na 15 miejscu po przecinku. Operacje na liczbach zmiennoprzecinkowych zawsze są obarczone błędem precyzji.