【问题标题】:PHP floatval bizarre parsingPHP floatval 奇怪的解析
【发布时间】:2015-08-16 20:04:06
【问题描述】:

我在客户端使用 JavaScript 进行了一些计算。

var 总计 = (((3 * 24) / 100) + 3); //结果是3.7199999999999998

我需要将这个3.7199999999999998 号码按原样存储在数据库中。 数据库在 MySQL 上,我对 ORM 使用 Doctrine 2,实体的精度设置为 /** @Column(type="decimal", precision=32, scale=16, nullable=false) * */,但保存后我看到数据库中只是数字 3.72,wtf 吗?经过一番检查,我发现学说使用floatval,在执行此floatval(3.7199999999999998) 后,您会得到3.72!为什么?

有解决办法吗?就像告诉教义不要使用 floatval 并按原样存储值?我也不想在这个专栏中使用 varchar。

提前致谢!

【问题讨论】:

  • 我不是学说专家2。但你不能改变数据类型 tp double.?
  • 不,我不能。结果是一样的3.72

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


【解决方案1】:

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);

【讨论】:

  • 所以因为 JavaScript 被破坏了我应该避免 16 位精度并且只使用 2 位精度?如果我需要更高的精度怎么办?
  • 如果您需要更高的精度,请使用BigDecimal library for JavaScriptbig.js
【解决方案2】:

3.72 实际上是正确的值。执行此计算时,JavaScript 会出现精度错误。

【讨论】:

  • 那么如何在 JavaScript 中从 3.72 取回 3.7199999999999998 号码?因为通过这次汇总,我使用3.72 得到了更多错误。
  • @Constantin 不知道为什么你想要不正确的值
  • 我需要返回这个错误的数字,因为我需要稍后再计算百分比,并且始终保持不变。
  • @Constantin - 也许应该将其作为问题的一部分。听起来还有更多事情要做,可能还有其他解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多