symfony form money type 为什么存到数据库 是价格乘以 100 ? 是 doctrine 缘故吗?
在数据库里的类型是 decimal(12,2)
页面里输入 2.22 form->getData() 得到 222
1
cpstar 2021-12-29 13:00:49 +08:00
难道不去数据库里看一下存的是 2.22 还是 222 么?如果是 222 ,那就是 getData 要做 cast ,如果是 2.22 ,还是 getData 做了错误的 cast 。
getData:所以就是怪我喽ㄟ(≧◇≦)ㄏ。 |
2
xumng123 2021-12-29 16:00:32 +08:00 via iPhone 1
钱不能用浮点数,必须化成整数
|
3
fkdog 2021-12-29 16:20:22 +08:00
浮点数做运算会出误差的。
0.3+0.3+0.3 算出来的结果是 0.89999999999. 强行四舍五入精度不够的话,容易产生误差,假设一笔误差 0.00001 ,一天上百万笔交易金额产生的误差就会以千万为单位。。一年下来就是好几百万了。 |
5
TonyG 2021-12-29 17:25:50 +08:00
老派规避浮点计算问题的做法,但很有效
|
6
zzzkkk OP @fkdog
特地去数据库测试了下 原来的 order_total 是 decimal(12,2) 新增一个字段 total decimal(12,2) update orders set total = order_total *100; 结果 sum 两个字段出来正好一样 无非是总数*100 +------------------+ | SUM(order_total) | +------------------+ | 48461619.87020 | +------------------+ +---------------+ | SUM(total) | +---------------+ | 4846161987.02 | +---------------+ 259585 行数据 |