/** * WXS 版精确乘法(适配商品单价×数量,支持任意小数位数) * @param {number} price - 单价(整数/小数) * @param {number} quantity - 数量(整数/小数) * @returns {number} 精确结果 */ function preciseMultiply(price, quantity) { // 处理空值/非数字,默认转为 0 price = typeof price === 'number' ? price : 0; quantity = typeof quantity === 'number' ? quantity : 0; // 转为字符串,获取小数位数(WXS 不支持模板字符串,用字符串拼接) var priceStr = price.toString(); var quantityStr = quantity.toString(); // 计算小数位数(无小数则为 0) var priceDecimalLen = priceStr.indexOf('.') !== -1 ? priceStr.split('.')[1].length : 0; var quantityDecimalLen = quantityStr.indexOf('.') !== -1 ? quantityStr.split('.')[1].length : 0; // 最大小数位数,确定放大倍数(10^maxLen) var maxDecimalLen = Math.max(priceDecimalLen, quantityDecimalLen); var scale = Math.pow(10, maxDecimalLen); // WXS 支持 Math 对象 // 放大为整数(用 Math.round 修正浮点数误差) var intPrice = Math.round(price * scale); var intQuantity = Math.round(quantity * scale); // 整数相乘后还原(除以 scale²,避免结果放大) return (intPrice * intQuantity) / (scale * scale); } // 暴露函数(WXS 必须通过 module.exports 暴露才能被 WXML 调用) module.exports = ({ preciseMultiply: preciseMultiply })