Боря се с функцията ceil() на PHP, която ми дава леко грешни резултати - помислете за следното:
$num = 2.7*3; //float(8.1)
$num*=10; //float(81)
$num = ceil($num); //82, but shouldn't this be 81??
$num/=10; //float(8.2)
Имам число, което може да има произволен брой десетични знаци и ми трябва закръглено до един десетичен знак. т.е. 8.1 трябва да бъде 8.1, 8.154 трябва да бъде 8.2, а 8 трябва да бъде оставено като 8.
Как стигам дотам е да взема числото, да го умножа по 10, ceil() и след това да разделя на десет, но както виждате, при някои обстоятелства получавам допълнително .1.
Може ли някой да ми каже защо се случва това и как да го поправя?
Всяка помощ се оценява високо
РЕДАКТИРАНЕ: имаше +=10 вместо *=10 :S
РЕДАКТИРАНЕ 2: Не съм споменал изрично това, но имам нужда от десетичната запетая ВИНАГИ да закръгля НАГОРЕ, никога надолу - този отговор е най-близкият досега:
rtrim(rtrim(sprintf('%.1f', $num), '0'), '.');
Въпреки това закръгля 3,84 до 3,8, когато имам нужда от 3,9. Съжалявам, че не беше по-ясно :(
Окончателна редакция:
Това, което в крайна сметка направих, беше следното:
$num = 2.7*3; //float(8.1)
$num*=10; //float(81)
$num = ceil(round($num, 2)); //81 :)
$num/=10; //float(8.1)
Което работи :)