Сравнение чисел с плавающей точкой в php
Ох уж эти числа с плавающей точкой...
Вот сколько вы думаете будет, если умножить 40155.20 на 100 в языке программирования php? Будет на вид вроде бы 4015520. Но это только на первый взгляд так - на самом деле это будет 4015520 типа float. И это совсем не то же самое, что целочисленные (int) 4015520. И если сравнить в условии (40155.20 * 100) == 4015520, то получаем false.
И до сегодняшнего дня я думал, что это можно обойти вот таким способом: intval(40155.20 * 100) == 4015520 - ну т.е. использовать функцию приведения к int. И оказался не прав - это выражение, несмотря на мое мнение, возвращает, собака, тоже false. Это потому что intval(40155.20 * 100) равно, как ни странно, 4015519 :(
При этом, если поменять цифру intval(30155.20 * 100) == 3015520, то уже будет true. И даже (30155.20 * 100) == 3015520 тоже будет true.
Короче, надо запомнить, что в php лучше делать так: intval(round(40155.20 * 100, 0)) == 4015520
ну так, чтобы наверняка. Т.е. еще и округлять float, прежде чем приводить к int.
И я даже подозреваю, что intval не обязательно делать, так как php, по идее, автоматически приводит типы, но, блин, не доверяю я ему - я уж лучше лишний раз перестрахуюсь.