web_demon, да, про строки это идея.
Вобще это косяк именно РНР потому что:
http://play.golang.org/p/AUmeemsbT7
В питоне кстати тоже есть такой косяк.
>>> a = 15.9
>>> b = 5.3 * 3
>>> a == b
False
>>> def float_eq(a, b, epsilon=0.00000001):
... return abs(a - b) < epsilon
...
>>> float_eq(a, b)
True
>>>
L!MP, reaper вот дело подсказывает. Но там нужно еще возится с возвращаемыми значениями, поэтому иногда проще строками сравнивать.
Я как то думал что это особенность из-за приведения типов в PHP, но вот и до сих пор не знаю чего так.
reaper, вот точно такой костыль я находил для РНР, но в случаем с РНР проще к строке привести.
Главное, что при приведении строки, не будет никаких не явных преобразованний нат числом.
В похапе всё гораздо проще.
bccomp(15.9, 5.3 * 3) == 0; // true
Гг. Но только для этого нужно его с соответствующим флагом скомпилить.
У меня в минте это по дефолту есть. В дебиане скорее всего тоже должно быть.
reaper, "проще" - это когда оно просто работает как в
GoLang, гг.
L!MP, Ну мы же говорим о похапе
reaper, ну раз и в пайтоне та же история, значит дело в более фундаментальных вещах.
L!MP, Ну возможно. Я не изучал этот вопрос. Но и там можно это более красиво сделать (с помощью Decimal или как его там). Просто мне лень было в этом разбираться.