PHP floatval奇怪的解析

时间:2015-06-02 20:36:09

标签: javascript php doctrine-orm floating-point floating-accuracy

我在客户端使用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。

提前致谢!

2 个答案:

答案 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似乎存在精度错误。