You need to enable JavaScript to run this app. 在Svelte购物车中使用Dinero.js调用multiply方法报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

在Svelte购物车中使用Dinero.js调用multiply方法报错如何解决

问题根因

报错的核心原因是你向ProductCard传递price属性时的处理错误:

  1. toFormat()是Dinero实例的格式化方法,返回的是带货币符号的字符串(例如"$40.00"),既不是Dinero实例,也不是符合要求的整数金额
  2. 第一种计算逻辑中,你把字符串类型的item.product.price传给Dinero构造函数的amount参数,而amount要求必须传入最小货币单位的整数,因此触发参数错误返回NaN
  3. 第二种计算逻辑中,你尝试调用字符串的multiply方法,字符串本身不存在该方法,因此报方法不存在错误
修复方案

按照以下步骤调整即可正常运行:

  • 第一步:修改ProductCard的传值逻辑,不要提前调用toFormat(),直接传递Dinero实例:
<ProductCard name ="dinerojs" description="to test using dinerojs" price ={Dinero({amount :40 , currency:"USD" })} options="false" />

如果业务需要单独存储原始金额数值,也可以直接传整数40,后续计算时再构造Dinero实例即可。

  • 第二步:调整购物车商品总价计算逻辑,直接调用Dinero实例的multiply方法:
updatedCartStore.items.forEach(item => {
  item.totalPrice = item.product.price.multiply(item.quantity);
});
  • 第三步:需要在页面渲染时展示格式化的价格时,再调用toFormat()方法,例如Svelte模板中写法:
<div class="price">{item.totalPrice.toFormat()}</div>

补充注意:Dinero构造函数的amount参数要求传入最小货币单位的整数,以USD为例,1美元对应100美分,如果你要表示40美元的商品,amount应该传入4000而非40,否则会出现金额计算偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 09:06:03