Странный глюк с типом float во время insert

computerworks

Новичок
Наблюдаю престранный глюк у мускула при попытке вставить число в поле с типом float.
Поле price. Вставляется всегда только целая часть числа. Почему?
Пробовал применять floatval - не помогло.
Непосредственно перед вставкой число имеет вид: целая часть.дробная часть.
Вставляется всегда только целая часть числа. Почему?

PHP:
$price=preg_replace('/,/','/./',$price);
$price=sprintf("%01.2f", str_replace(" ","",$price));
$update="INSERT INTO products (category_id, name, description, producer, product_code, mass, price, in_stock, customers_rating, customer_votes, picture, big_picture, enabled, add_date, import_date, box_count) VALUES('$category_id', '".mysql_real_escape_string($product_name)."', '".mysql_real_escape_string($description)."',
        '".mysql_real_escape_string($producer)."', '$product_code', '$mass', $price, '$in_stock', 0, 0, '$picture_image', '$big_picture_image', 'on', NOW(), NOW(), '$box_count')";
$update_query=mysql_query($update);
 

С.

Продвинутый новичок
Никогда! НИКОГДА!! Н И К О Г Д А !!! Не использовать хранение денег в типе float.

Что конкретно до этой ошибки, то не охота даже копаться в том, что заранее гнило.
 

morfey

Новичок
А double чем плох?

~
Извините, погуглил. десимал более точен.
 

С.

Продвинутый новичок
Что значит "более" точен? С деньгами всегда однозначно: либо точно либо нет. "Более" или "менее" здесь не приемлемо.
 

bebeka

Новичок
Что значит "более" точен? С деньгами всегда однозначно: либо точно либо нет. "Более" или "менее" здесь не приемлемо.
Это именно в бд поле должно быть типа Decimal ?

То есть строку в php формировать с floatval() ? перед тем как передать в бд.
 

С.

Продвинутый новичок
Для начала ответьте [себе], зачем floatval()?
 

bebeka

Новичок
Для начала ответьте [себе], зачем floatval()?
А как тогда, нужно делать?
floatval я выполняю после каких-то операций с цифрами, перед тем как занести их бд. ( если конечно, в результате будут цифры с плавающей точкой ).
 

С.

Продвинутый новичок
То есть записывая строку 'привет' в числовое поле, вы ожидаете, что база проглотит это без разговоров? Но в ухдшем случае если применить floatval(), то в там волшебным образом окажется число? Интересно какое?
 

bebeka

Новичок
То есть записывая строку 'привет' в числовое поле, вы ожидаете, что база проглотит это без разговоров? Но в ухдшем случае если применить floatval(), то в там волшебным образом окажется число? Интересно какое?
floatval('привет') => 0
 

С.

Продвинутый новичок
Браво! Остается вопрос, зачем в числовое поле писать строку 'привет'?
 

С.

Продвинутый новичок
Ответ: нет никакой необходимости применять floatval() к денежным данным.
 

С.

Продвинутый новичок
Вообще все данные между базой и PHP путешествуют в виде строк (если ты не в курсе).
 
Сверху