如何使用toFixed方法动态截取小数位且不进行四舍五入
动态截断小数位(无四舍五入)的实现方案
你当前用toFixed(precision)会自动四舍五入,不符合需求,这里提供两种直接截断小数位的实现方法,适配动态返回的precision值:
方法一:数学运算截断法
通过放大数值后截断整数部分,再缩小回原比例,实现无四舍五入的效果,适合大多数常规数值场景:
function truncateToPrecision(num, precision) { const factor = Math.pow(10, precision); // Math.trunc直接移除小数部分,正负数值都适用 return Math.trunc(num * factor) / factor; }
替换你原有代码的用法:
const precision = pairType === 'base' ? selectedBaseCurrencyObj.precision.amount : selectedBaseCurrencyObj.precision.cost; // 先截断数值 const truncatedNum = truncateToPrecision(Number(assetObj.freeTotal), precision); // 如果需要固定位数的字符串(比如精度为2时,1.2显示为"1.20"),再转成字符串 const displayValue = truncatedNum.toFixed(precision);
方法二:字符串直接处理法
如果担心大数运算的精度问题(比如加密货币的超大数值),可以直接操作字符串来截断小数部分:
function truncateToPrecision(num, precision) { // 精度为0时直接返回整数部分 if (precision <= 0) return Math.trunc(num).toString(); const numStr = num.toString(); const [integerPart, decimalPart = ''] = numStr.split('.'); // 截取指定长度的小数部分,不足的话自动补空(后续转固定位数可以补0) const truncatedDecimal = decimalPart.slice(0, precision); return `${integerPart}.${truncatedDecimal}`; }
额外注意事项
- 确保
precision是合法的非负整数,可提前做处理:precision = Math.max(0, parseInt(precision, 10)) - 如果遇到科学计数法格式的数值,可先转成普通数字字符串再处理(加密货币项目中这种情况极少)
内容的提问来源于stack exchange,提问作者Kimbo
相关产品推荐
相关产品推荐

