Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема сравнивания дробных чисел (PHP+MySQL)
 
 автор: dogo   (06.03.2006 в 15:02)   письмо автору
 
 

Таблица: «colors»
(id_color TINYINT(2) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
color_value FLOAT(2,1) UNSIGNED NOT NULL);

color_value содержит значения:
16.7
12.3
17.0

Данные в таблицу вводятся пользователем из HTML формы.
После ввода значение сравнивается с имеющимися в таблице.
При сравнении чисел с «нулевой» дробной частью всё происходит удачно, но стоит ввести число со значимой дробной частью, как сравнивание перестает работать…

Пользователь несколько раз подряд вводит 12.3 после чего колонка «color_value» принимает вид:
16.7
12.3
17.0
12.3
12.3

12.3


Ниже приведен код обрабатывающий пользовательский ввод.
PHP:

//$formValue – значение, введенное пользователем, полученное из формы

@ $db = new mysqli('myHost', 'myUser', 'myPassword', 'myDatabase');
$formValue=sprintf ("%01.1f", $formValue);
$query_select = "select * from $tableName where $itemInRow=$formValue";
$query_insert = "insert into $tableName values ('','$formValue')";

$result = $db->query($query_select);
$num_results = $result->num_rows;
if($num_results>0){
echo “такая запись уже существует!<br>”;
}
else
{
$result = $db->query($query_insert);
$num_results = $db->affected_rows;
$msg.= "запись успешно внесена!<br>";
}
$result->free;
$db->close();

   
 
 автор: Artemy   (06.03.2006 в 15:08)   письмо автору
 
   для: dogo   (06.03.2006 в 15:02)
 

Попробуйте вместо точки использовать запятую.

   
 
 автор: Trianon   (06.03.2006 в 15:17)   письмо автору
 
   для: dogo   (06.03.2006 в 15:02)
 

Значения с плавающей точкой хранятся приближенно, и на строгое равенство не сравниваются. Если Вы хотите сравнивать их на равно/не равно, Вам придется хранить их в другом формате.

   
 
 автор: Artemy   (06.03.2006 в 15:40)   письмо автору
 
   для: Trianon   (06.03.2006 в 15:17)
 

Например, придать полю, в котором хранится это число, тип FLOAT.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования