如何正确地在数据库中插入float变量

时间:2014-10-01 08:39:35

标签: php mysql sql number-formatting

我有下表

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"。

2 个答案:

答案 0 :(得分:2)

首先将form_order_amount转换为float,使用:

$form_order_amount = floatval(str_replace(',', '.', $form_order_amount));

答案 1 :(得分:0)

我有类似的问题。这就是我做到的。来源php manuals

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)))
    );
}