| 1234567891011121314151617181920212223242526272829303132333435 |
- /**
- * 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
- })
|