Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在firestore/nodejs中存储/使用十进制和货币值_Node.js_Google Cloud Firestore - Fatal编程技术网

Node.js 如何在firestore/nodejs中存储/使用十进制和货币值

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中没有正式推荐的货币值类型,因此您

在MongodDB中,有一个数据类型“Decimal128”,它正确地保存十进制的值(请参阅“为什么”)


在firebase中存储/使用十进制和货币类型的推荐方法是什么?转换为Bigdecimal或从Bigdecimal转换为Bigdecimal?或者firestore中的十进制类型足以克服舍入问题吗?

根据,firestore的浮点类型是64位双精度,IEEE 754。此格式有。没有“十进制”Firestore中的格式与其他数据库中的格式相同。Firestore中没有正式推荐的货币值类型,因此您应该研究以其他方式表示货币值的其他方式。web搜索可能会帮助您实现这一点。

正如@Doug注释所述,浮点不精确使得
double
不适合存储货币cy(或要求一致性的任何其他十进制值),特别是如果要对这些存储值进行任何计算

虽然使用
String
type存储小数的解决方案可行,但如果以后再执行数学运算,可能会导致问题

另一种方法是将货币存储为
int
美分,然后在向用户显示时除以100,因此在存储用户输入之前乘以100

例如,虽然as
double
浮动:

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所提到的,我们在谷歌做的一件常见的事情就是ore
amount\u micros
而不是
amount
,这意味着花1美元,你就可以将1000000存储为
int
。这样做更容易计算。

如果你想让int(比如数字350)有小数,你可以在客户端的末尾加上“.00”。例如,在Angular 2+中,你可以这样使用:

  {{350 | number:'3.2-5'}}
  <!--output: '350.00'-->
{{350 |编号:'3.2-5'}

谢谢。经过大量阅读,我决定使用字符串!在技术如此先进的时代,这似乎很可笑。“doubleValue”适合我!