【发布时间】:2014-11-26 01:22:44
【问题描述】:
我有下表
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”。
【问题讨论】:
-
你需要 float
orderAmountfloat(7,2)` 或其他需要的小数精度 -
30,45小数点为,对计算机来说不是有效数字;插入 MySQL 时需要小数点 (.) -
也就是说,不要将
float用于数据库资金,使用decimal.... 甚至更好,将值调整为美分,以便在需要时使用整数对浮点精度可能导致问题的税收计算等进行调整 -
number_format() 应该在显示浮点值时使用,而不是在内部存储时使用,它不会将
30,45转换为30.45,但会反过来
标签: php mysql sql number-formatting