You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord自制经济系统中货币数值出现字符串拼接而非算术相加的问题求助

解决Discord经济系统work命令字符串拼接问题

嘿,这个问题太常见了!你遇到的是字符串与数字类型不匹配导致的算术操作异常——你的inventoryS.currency字段在数据库里是字符串类型,不是数字类型,所以执行+=的时候JS会自动把数字转成字符串做拼接,而不是算术相加。

问题根源分析

在你的代码里,payment是通过Math.floor生成的数字,但inventoryS.currency如果是字符串(比如从数据库读出来的"123"),那么"123" + 123就会变成字符串拼接的"123123",而不是预期的246。

三步解决问题

  1. 修复现有数据库数据类型
    如果已经有用户数据存在数据库里,需要把所有currency字段从字符串转成数字(假设你用的是Mongoose + MongoDB):

    // 运行一次这个脚本,批量转换现有数据
    inventory.updateMany(
      { currency: { $type: "string" } },
      [ { $set: { currency: { $toInt: "$currency" } } } ]
    );
    
  2. 修改代码中的加法逻辑
    在拼接前强制把currency转成数字,确保算术运算生效:

    // 替换原来的inventoryS.currency += payment
    inventoryS.currency = Number(inventoryS.currency) + payment;
    // 或者如果是整数的话,用parseInt更严谨
    // inventoryS.currency = parseInt(inventoryS.currency, 10) + payment;
    
  3. 从根源预防问题
    检查你的Mongoose Schema定义,确保currency字段被设置为Number类型,这样新创建的用户数据会自动存储为数字:

    const inventorySchema = new mongoose.Schema({
      userID: String,
      guildID: String,
      item1: String,
      currency: { type: Number, default: 0 } // 这里必须设为Number,默认值0
    });
    

这样修改后,再执行work命令时,currency和payment都是数字类型,加法就会是正常的算术运算啦!

内容的提问来源于stack exchange,提问作者itsmateo20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 21:17:50