我在客户端使用JavaScript进行了一些计算。
var total =(((3 * 24)/ 100)+ 3); //结果是3.7199999999999998
我需要将此3.7199999999999998
号码存储在数据库中。
数据库在MySQL上,我使用Doctrine 2进行ORM,实体的精度设置为/** @Column(type="decimal", precision=32, scale=16, nullable=false) * */
,但保存后我看到在数据库中只有数字3.72
,wtf?经过一些检查后,我发现该学说使用floatval
,执行此floatval(3.7199999999999998)
后,您得到3.72
!!为什么呢?
有解决方法吗?就像告诉学说不使用floatval并存储值一样?我也不想在这个专栏中使用varchar。
提前致谢!
答案 0 :(得分:2)
3.72是正确的值。 3.7199999999999998结果是由于JavaScript中的浮点不精确(参见:How to deal with floating point number precision in JavaScript?)。我建议您在JavaScript代码中使用toFixed()来避免这种情况。
var total = (((3 * 24) / 100) + 3).toFixed(2);
答案 1 :(得分:1)
3.72实际上是正确的值。执行此计算时,JavaScript似乎存在精度错误。