ошибка при вычетании вещественных чисел

myname

Guest
ошибка при вычетании вещественных чисел

Заранее извиняюсь.. если объясню плохо.. так как не знаю даже в чем проблема
Есть у меня цикл в котором делаются некоторые перерасчеты
PHP:
while ( *CONDITION* ) {
	...
	// считаем сколько нужно списывать со счета в день
	$payInDay = $planObj->price / $dayInYear;
	// форматируем к предствалению DECIMAL(N,2)
	$payInDayFormat = floor($payInDay * 100) / 100;	
	// считаем остаток.. прибовляем к существующему
	$_rest += $payInDay - $payInDayFormat;
	// тут... либо $restFormat = 0.00 либо $restFormat = 0.01  
	$restFormat = floor($_rest * 100) / 100; 
// перерасчет баланса и остатка
	$userObj->_balance -= $payInDayFormat - $restFormat;  // в этой строчке и глючит!!
	$userObj->_rest -= $restFormat;
	...
}
и работает он очень хорошо и правильно до момента.. когда параметры принимают следующее значение:
(значения параметров до строчки.. где глючит)
payInDay : 0.81967213114754
payInDayFormat : 0.81
_rest : 0.010000000000002
restFormat : 0.01
$userObj->balance : 0.82

и в той злосчастной строчке он делает присваивания и получает следущее значение:
userObj_balance : -1.0234868508263E-016

как так??... ведь... если я не "машина"..то ручками я получу :
$userObj->_balance -= $payInDayFormat - $restFormat; <==> 0.82 - 0.81 - 0.01

где я туплю??... помогите, плиз
 

neko

tеam neko
нигде в общем-то
просто такова суровая реальность вычислений с плавающей точкой

если это деньги может помочь bcmath
 

myname

Guest
огромное СПАСИБО!!.... ну прям нет слов!!...
bcsub - и все чики-пуки :))
 
Сверху