У меня есть форма ввода, чтобы получить номер (это цена). Он может быть десятичным, как 102,5. Я должен сравнить его с другим десятичным числом, например, 102,6. Как можно справиться с этим? Я не хочу использовать round (), потому что я точно разбираюсь.
Вы можете сравнить абсолютную (то есть численную) разницу с «эпсилон» (ваш «допуск» 1 ):
$epsilon = 0.01; $diff = abs(102.5 - 102.6); // .1 if ($diff <= $epsilon) { // The numbers are equal } else { // The numbers are not equal enough! }
И, немного читаю: « Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой » и « Сравнение чисел с плавающей точкой ».
Кроме того, вы можете найти следующие вопросы (и ответы!):
1 Правильно: вы должны решить, что делает два числа равными. Это может быть 0.1
(что составляет 1.1
равное 1.0
), 0.01
( 1.03
) и т. Д.
Не храните цены как плавающие, используйте целые числа (хранить центы, а не доллары).
Просто сделайте его десятичным из этого формата
$kinda_decimal = "102,5"; $kinda_decimal = floatval(str_replace(",",".",$kinda_decimal));
и сравните его