在Svelte购物车中使用Dinero.js调用multiply方法报错如何解决
问题根因
报错的核心原因是你向ProductCard传递price属性时的处理错误:
toFormat()是Dinero实例的格式化方法,返回的是带货币符号的字符串(例如"$40.00"),既不是Dinero实例,也不是符合要求的整数金额- 第一种计算逻辑中,你把字符串类型的
item.product.price传给Dinero构造函数的amount参数,而amount要求必须传入最小货币单位的整数,因此触发参数错误返回NaN - 第二种计算逻辑中,你尝试调用字符串的
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
相关产品推荐
相关产品推荐

