数据库字段是decimal(7,2),后端插入时怎么对金额处理稳妥不会出错?

$money = 1500.668;
var_dump(sprintf("%.2f", $money)); //string(7) "1500.67"
var_dump(round($money,2)); //float(1500.67)

我所知道的这两种,不知哪种好,还有没有最稳妥的处理方法

welcome come back
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6
自由与温暖是遥不可及的梦想
floatval(bcadd($number, 0, 2))
3年前 评论
自由与温暖是遥不可及的梦想
floatval(bcadd($number, 0, 2))
3年前 评论

2种四舍五入的处理方式不同,sprintf("%.2f", $money)这种方式四舍六入五成双,建议转化为整数四舍五入再转化为小数

3年前 评论
Mumujin

建议金额存到6位。

floatval(bcsub((string)$userBalance, (string) $amount, 6))
3年前 评论

如果你需要四舍五入,直接就往里面存就好了,decimal存的小数位数超出设定的小数位数,会自动进行四舍五入,不需要的话,小数需要精度运算

3年前 评论

你的金额这么小的吗?只需要 7 位? :grin:

3年前 评论
php_yt (楼主) 3年前

建议第一种或者使用 bc 库,因为 string 是最保险的数据类型,另外,其实最好可以模仿微信、支付宝,使用分做单位,用整数保存,会减少小数出现的计算与金额分割问题

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!