Node.js 如何在firestore/nodejs中存储/使用十进制和货币值
在MongodDB中,有一个数据类型“Decimal128”,它正确地保存十进制的值(请参阅“为什么”)Node.js 如何在firestore/nodejs中存储/使用十进制和货币值,node.js,google-cloud-firestore,Node.js,Google Cloud Firestore,在MongodDB中,有一个数据类型“Decimal128”,它正确地保存十进制的值(请参阅“为什么”) 在firebase中存储/使用十进制和货币类型的推荐方法是什么?转换为Bigdecimal或从Bigdecimal转换为Bigdecimal?或者firestore中的十进制类型足以克服舍入问题吗?根据,firestore的浮点类型是64位双精度,IEEE 754。此格式有。没有“十进制”Firestore中的格式与其他数据库中的格式相同。Firestore中没有正式推荐的货币值类型,因此您
在firebase中存储/使用十进制和货币类型的推荐方法是什么?转换为Bigdecimal或从Bigdecimal转换为Bigdecimal?或者firestore中的十进制类型足以克服舍入问题吗?根据,firestore的浮点类型是64位双精度,IEEE 754。此格式有。没有“十进制”Firestore中的格式与其他数据库中的格式相同。Firestore中没有正式推荐的货币值类型,因此您应该研究以其他方式表示货币值的其他方式。web搜索可能会帮助您实现这一点。正如@Doug注释所述,浮点不精确使得
double
不适合存储货币cy(或要求一致性的任何其他十进制值),特别是如果要对这些存储值进行任何计算
虽然使用String
type存储小数的解决方案可行,但如果以后再执行数学运算,可能会导致问题
另一种方法是将货币存储为int
美分,然后在向用户显示时除以100,因此在存储用户输入之前乘以100
例如,虽然asdouble
浮动:
print(0.2 + 0.1);
= 0.30000000000000004
改为int
x100:
int x = 20;
int y = 10;
print((x+y)/100);
= 0.3
如果您的项目使用了许多不同的货币字段,这可能会变得很麻烦,但对于大多数事情来说,使用
int
x100作为基数100货币具有一定的简单性和透明度,我认为这可以保持代码的可预测性。我会使用类似的方法,如@djoll所提到的,我们在谷歌做的一件常见的事情就是oreamount\u micros
而不是amount
,这意味着花1美元,你就可以将1000000存储为int
。这样做更容易计算。如果你想让int(比如数字350)有小数,你可以在客户端的末尾加上“.00”。例如,在Angular 2+中,你可以这样使用:
{{350 | number:'3.2-5'}}
<!--output: '350.00'-->
{{350 |编号:'3.2-5'}
谢谢。经过大量阅读,我决定使用字符串!在技术如此先进的时代,这似乎很可笑。“doubleValue”适合我!