uniapp中digit不需要四舍五入的实现方法
在uniapp中,使用digit过滤器时默认会对数字进行四舍五入处理,但我的业务需求需要直接截断小数位而不进行四舍五入。例如:12.789希望显示为12.78而不是12.79。请问如何修改或自定义digit过滤器来实现这个功能?
        
          2 回复
        
      
      
        在uniapp中,若需保留小数但不四舍五入,可使用Math.floor()或字符串截取。例如:
let num = 3.14159;
let result = Math.floor(num * 100) / 100; // 保留两位小数
// 或
let str = num.toString();
result = parseFloat(str.substring(0, str.indexOf('.') + 3));
这样即可截断小数位,避免四舍五入。
在 UniApp 中,如果需要处理数字(如 digit)并避免四舍五入,可以使用以下方法:
方法一:使用 Math.floor 或 Math.trunc 截断小数
- Math.floor:向下取整,适用于正数。
- Math.trunc:直接截断小数部分,适用于正负数。
示例代码:
let num = 3.789;
let result1 = Math.floor(num * 100) / 100; // 保留两位小数,结果为 3.78
let result2 = Math.trunc(num * 100) / 100; // 保留两位小数,结果为 3.78
方法二:字符串处理(正则匹配)
通过正则表达式截取指定位数的小数,避免四舍五入。
示例代码:
function truncateDecimal(num, digits) {
  let regex = new RegExp(`^-?\\d+(?:\\.\\d{0,${digits}})?`);
  let match = num.toString().match(regex);
  return match ? parseFloat(match[0]) : num;
}
let num = 5.6789;
let result = truncateDecimal(num, 2); // 结果为 5.67
方法三:乘以倍数后取整再还原
通过数学运算直接截断小数位。
示例代码:
function toFixedNoRound(num, digits) {
  let factor = Math.pow(10, digits);
  return Math.trunc(num * factor) / factor;
}
let num = 9.998;
let result = toFixedNoRound(num, 2); // 结果为 9.99
注意事项
- 如果数字是字符串,先使用 parseFloat()转换。
- 负数时建议用 Math.trunc,避免Math.floor的向下取整问题。
根据需求选择合适的方法即可实现不四舍五入的数字处理。
 
        
       
                     
                   
                    

