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

Shopify Script Editor中Decimal运算报错问题求助

解决Shopify脚本中Decimal类型除法报错问题

问题根源

Shopify脚本环境使用的是自定义Decimal类(非Ruby标准库的BigDecimal),该类不支持to_f/to_i方法,且直接与整数进行除法运算时会触发内部类型不匹配错误bad decimal operation (0 x 4)。

可行解决方案

  • 方案1:通过字符串中转转换类型
    利用Decimal类的to_s方法将其转为字符串,再转成整数/浮点数进行计算:

    # 先转整数再转浮点数做除法
    BOX_PRODUCTS_INT = BOX_PRODUCTS.to_s.to_i
    BOX_PERCENT = BOX_DISCOUNT / BOX_PRODUCTS_INT.to_f
    
    # 或直接转浮点数计算
    BOX_PERCENT = BOX_DISCOUNT.to_f / BOX_PRODUCTS.to_s.to_f
    
  • 方案2:统一为Decimal类型运算
    将整数类型的BOX_DISCOUNT转为Shopify的Decimal类型,再执行除法:

    BOX_PERCENT = Decimal.new(BOX_DISCOUNT) / BOX_PRODUCTS
    

    部分Shopify脚本环境支持简写Decimal(BOX_DISCOUNT),可按需测试。

  • 方案3:从原始Money对象获取正确数值
    直接从Money对象提取可用数值,绕开cents返回的Decimal问题:

    # 若amount是美元单位的浮点数(如320.0),乘100得到分单位数值
    BOX_PRODUCTS = (line_item.line_price.amount * 100).to_i
    BOX_PERCENT = BOX_DISCOUNT / BOX_PRODUCTS.to_f
    

验证要点

确保运算时两边数值类型统一,要么都转为Ruby原生的整数/浮点数,要么都使用Shopify的Decimal类型,避免跨类型运算触发内部错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:45:12