请注意,我知道关于这个问题还有一些其他问题,但没有真正的答案。
因此,自从实现增量字段值以来发生的情况是,当增加浮点数时,大多数时候您会得到十几个小数而不是实际数字。
// incrementing 0, with 0.1, 11 times, returns 1.0999999999999999
Math.round( 1.0999999999999999 * 100 + Number.EPSILON ) / 100
这会返回正确的数字...所以我想知道,这不能在处理增加 Firestore 内实际值的方法内部实现吗?
问题是,当我想显示基于区域设置的数字时,我使用以下命令:
number.toLocaleString( undefined, { minimumFractionDigits: 2 })
那会显示1.09
这是错误的,客户会对他们的收入感到困惑。
客户端收到数据后,除了操作数据外,还需要做什么?
这样做的另一个副作用是,当使用增加一个大的负值时,有时,由于某种原因,你会得到+e
在 Firestore 中的值内,当在服务器端获取它时(至少使用 PHP Admin SDK ),该数字最终作为字符串而不是整数。
根据文档, Cloud Firestore 将浮点数存储在IEEE 754格式。请花一些时间来理解这种格式的含义。基本上,您不能指望浮点数能够准确保留您指定的精度,因为格式对于某些数字不可能做到这一点。存储号码时,您可能会遇到一些小的变化。 Stack Overflow 上已经可以找到此类行为的详细总结:
如果您必须保持数字精度,请考虑使用一个库来帮助加载和存储具有您所需精度的数字。几乎所有金融应用程序都会执行类似的操作,因为 IEEE 754 可以有效地丢失数据,以便将数据压缩到较小的尺寸。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)