将十进制数存储到 MySQL 数据库中

Posted

技术标签:

【中文标题】将十进制数存储到 MySQL 数据库中【英文标题】:Store decimal number into MySQL database 【发布时间】:2018-11-20 22:00:27 【问题描述】:

这是 AJAX 的返回,它显示了我试图将什么值存储到数据库中:

这是真正存储到数据库中的内容(我存储的是 58.00):

这是表的结构:

这里是 php

$req = $bdd->prepare("INSERT INTO salon_histo(reference, designation, colour, size, type, price, qty, payment, date) VALUES(:reference, :designation, :colour, :size, :type, :price, :qty, :payment, NOW())");
    $req->execute(array(
        'reference' => $_POST['reference'],
        'designation' => $_POST['designation'],
        'colour' => $_POST['colour'],
        'size' => $_POST['size'],
        'type' => $_POST['type'],
        'price' => floatval($price[0]),
        'qty' => $_POST['soldQty'],
        'payment' => $_POST['payment']
    ));
    $req->closeCursor();
    echo json_encode($price[0]);

当我尝试存储 58,33 时,mysql 如何在 0 处存储 2 位小数的数据?我尝试在 PHP 中使用 floatval,确实数字变为 58。

【问题讨论】:

请不要使用屏幕截图。复制粘贴文本数据和标记作为代码或引用。 How to store decimal in MySQL?的可能重复 对于 MySQL,数字通常格式化为 XX.XX,而不是 XX,XX。将数字从逗号转换为句点,然后再将其插入 MySQL。 我猜你的价格是欧盟格式 x,xx 而不是 PHP/MySQL/任何十进制格式 x.xx 所以当你 floatval() 它时,它会在(包括)之后删除所有内容逗号;您可能想查看NumberFormatter 类或number_format() 您的问题是“逗号”。 Mysql 使用 '句号' 作为小数分隔符。 【参考方案1】:

价格似乎是一个数组:

'price' => floatval($price[0]),

可能小数部分有key 1?

'price' => (float) ($price[0] . '.' . $price[1]), 

如果这不起作用,请var_dump($price) 并将结果粘贴给我。

要检查的另一件事是 PHP 是否使用逗号格式化这些数字。

【讨论】:

问题确实是昏迷。我使用 str_replace 将 "," 替换为 "."。数据被正确存储。谢谢你的帮助。截图,因为我无法显示数据是如何存储到 db 中的。 没问题,你能把这个标记为正确答案吗?

以上是关于将十进制数存储到 MySQL 数据库中的主要内容,如果未能解决你的问题,请参考以下文章

JAVA如何将二进制数转换成文件?

存储过程未按预期保存十进制数

整数到二进制存储在数组中

如何将二进制数存储在数组中?

java中如何将字符串转换为二进制数

将十六进制数转换为十进制数