У меня есть следующая таблица
CREATE TABLE IF NOT EXISTS `payment_data` (
`orderid` int(11) NOT NULL,
`orderDesc` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`orderAmount` float NOT NULL,
UNIQUE KEY `orderid` (`orderid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
и я пытаюсь вставить строку в нем с помощью PHP.
$sql = 'INSERT INTO payment_data '.
'(orderid, orderDesc, name, email, orderAmount) '.
'VALUES ( '.$form_order_id.', "'.$form_order_desc.'", "'.$form_name.'", "'.$form_email.'", '.number_format($form_order_amount, 2, '.', ',').' )';
Проблема в том, что «orderAmount» вставляется без десятичной части. Например, если $ form_order_amount = 30,45, то 30 — это то, что вставлено в базу данных.
Я использовал number_format (), потому что он должен конвертировать «30,45» в «30,45».
Преобразуйте form_order_amount, чтобы сначала плавать, используя это:
$form_order_amount = floatval(str_replace(',', '.', $form_order_amount));
У меня была похожая проблема. Вот как я это сделал. Исходный php руководства
public static function tofloat($num) {
$dotPos = strrpos($num, '.');
$commaPos = strrpos($num, ',');
$sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos :
((($commaPos > $dotPos) && $commaPos) ? $commaPos : false);
if (!$sep) {
return floatval(preg_replace("/[^0-9]/", "", $num));
}
return floatval(
preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . '.' .
preg_replace("/[^0-9]/", "", substr($num, $sep + 1,
strlen($num)))
);
}