2014-10-01 105 views
0

我有如下表如何插入浮點型變量在數據庫中正確

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

+0

您需要的浮動小數精度'orderAmount'浮動(7,2)'什麼desireable – 2014-10-01 08:41:06

+0

'30,45'用','小數點是不是一個有效的數字給計算機;插入到MySQL時需要小數點('.') – 2014-10-01 08:42:11

+2

也就是說,不要使用'float'作爲數據庫資金,請使用[decimal](http://dev.mysql.com/doc/refman/5.6/) en/precision-math-decimal-characteristics.html)....或甚至更好,將值調整爲分,以便您使用整數,如果您需要爲稅計算等進行調整等浮點精度可能會導致問題 – 2014-10-01 08:43:28

回答

1

轉換form_order_amount先浮動,使用此:

$form_order_amount = floatval(str_replace(',', '.', $form_order_amount)); 
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))) 
    ); 
} 
相關問題