Значения с плавающей точкой являются по своей природе неточной и очень редко равны друг другу из-за способа их хранения и ошибок округления. Вы должны сравнивать поплавки, видя, являются ли эти два значения «достаточно близкими». То есть, сравнивая абсолютное значение разности между двумя значениями с значительно малым погрешностью (часто называемой «эпсилон»).
Одна такая реализация может быть:
if (abs($total - 1) < 0.000000001)
die("total is 1");
} else {
die("total is not 1");
}
Обратите внимание, что требования только вашего приложения действительно может определить, что безопасный предел погрешности есть и в какой момент номера должны быть закруглены для отображения.
Если вы имеете дело с валютными ценностями, например, и требуют точной точности, лучшим решением было бы отказаться, с плавающей запятой арифметику полностью. Одним из вариантов в этом случае будет использование целочисленного типа и сохранение числа в виде центов, деление только на последнюю минуту, чтобы отобразить номер для пользователя (или даже не делить, а вместо этого вставить десятичную точку в строку).
http://stackoverflow.com/questions/4682889/is-floating-point-ever-ok – thumbmunkeys