在Firestore和Node.js中存储和使用Decimal和货币值,通常涉及到数据类型的转换和精确计算。Firestore本身不支持Decimal类型,但你可以使用JavaScript的BigInt
或第三方库来处理大数和精确计算。对于货币值,通常建议将其转换为最小货币单位(如分)进行存储,以避免浮点数精度问题。
decimal.js
,提供更丰富的Decimal类型支持。const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
async function saveMoney(userId, amountInCents) {
await db.collection('users').doc(userId).set({
balance: BigInt(amountInCents)
});
}
async function getMoney(userId) {
const userDoc = await db.collection('users').doc(userId).get();
if (userDoc.exists) {
return userDoc.data().balance;
}
return null;
}
首先安装decimal.js
:
npm install decimal.js
然后在代码中使用:
const Decimal = require('decimal.js');
async function saveDecimal(userId, decimalValue) {
const decimal = new Decimal(decimalValue);
await db.collection('users').doc(userId).set({
value: decimal.toString()
});
}
async function getDecimal(userId) {
const userDoc = await db.collection('users').doc(userId).get();
if (userDoc.exists) {
const decimal = new Decimal(userDoc.data().value);
return decimal.toNumber();
}
return null;
}
原因:JavaScript中的浮点数运算存在精度问题,特别是在金融计算中。
解决方法:使用BigInt或Decimal库来处理精确计算。
原因:Firestore不支持Decimal类型,需要转换为字符串或其他支持的类型存储。
解决方法:将Decimal值转换为字符串存储,并在读取时转换回Decimal类型。
通过以上方法,你可以在Firestore和Node.js中有效地存储和使用Decimal和货币值,确保数据的精确性和一致性。
Techo Day
云+社区技术沙龙[第9期]
云+社区技术沙龙[第17期]
高校公开课
DBTalk技术分享会
云+社区技术沙龙[第1期]
第四期Techo TVP开发者峰会
云+社区技术沙龙[第8期]
云+社区技术沙龙 [第31期]
领取专属 10元无门槛券
手把手带您无忧上云