Исходные данные:
Есть переменная $sum, которая высчитывается путем сложения вычитанных из файла величин. Имеет тип float.
Есть переменная $control, которая вытаскивается из другого файла. Имеет тип string
Суть - сумма величин должна равняться контрольному значению.
Есть код:
var_dump($sum)
var_dump($control);
if ($sum==$control)
{
print 'Ok';
}
else
{
print 'Error'
}1. При значениях
float(865.4)
string(5) "865.4"
дает ошибку
2. При искусственно указанных значениях для теста
$sum=865.4;
$control='865.4';
Сравнение проходит нормально с результатом Ок
float(865.4)
string(5) "865.4"
3. Если перед сравнением вставить приведение типа
$control=(float)$control;
то все равно дает ошибку
float(865.4)
float(865.4)
4. Если перед сравнением поставить приведение типа
$sum=(string)$sum;
то отрабатывает нормально с результатом ОК
5. Если переменные поменять типами местами
$control=(float)$control;
$sum=(string)$sum;
то все равно отрабатывает абсолютно нормально с результатом ОК
6. Хить сезона
$sum=(float)(string)$sum;
то все равно отрабатывает абсолютно нормально с результатом ОК
Грабли в виде хранения $sum.Что не так?
$sum формируется следующим кодом
while($buf = zip_entry_read($zip_entry,81))
{
$buf=trim($buf);
if(strlen($buf)>0)
{
$arr=explode(',',$buf);
$inc=preg_replace('/"/','',$arr[2]);
$sum=$sum+$inc;
}
}
Исходная строка
"12345","123","21","12345","76"
"12345","123","21.4","12345","76"