JavaScript中toFixed(3)无法获取小数点后最后三位的解决办法
解决方案
你需要提取小数点后的最后三位,而toFixed(3)的作用是保留小数点前的数字加上前三位小数,因此无法满足需求。可以通过字符串处理实现目标效果:
var mynumber = 800.60000305176541; // 转换为字符串,规避浮点数精度问题 var numStr = mynumber.toString(); // 分割整数与小数部分 var parts = numStr.split('.'); var integerPart = parts[0]; var decimalPart = parts[1] || ''; // 截取小数部分最后三位,不足三位时补0 var lastThreeDecimals = decimalPart.slice(-3).padStart(3, '0'); // 拼接成目标格式 var changenumber = `${integerPart}.${lastThreeDecimals}`; // 若需数字类型,可转为Number:changenumber = Number(changenumber); console.log(changenumber); // 输出 "800.541"
补充说明
- 先转字符串是为了避免JS浮点数精度存储导致的小数部分失真;
slice(-3)用于直接截取字符串的最后三位字符,padStart(3, '0')保证当小数部分不足三位时自动补零(比如数字为800.12时,会处理为800.012);- 如果你的数字可能出现科学计数法格式(如极大/极小数值),可以先将其转为普通字符串再处理:
function toNonExponential(num) { var m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/); return num.toFixed(Math.max(0, (m[1] || '').length - m[2])); } var mynumber = 800.60000305176541; var numStr = toNonExponential(mynumber); // 后续分割、截取步骤同上
内容的提问来源于stack exchange,提问作者zaknio55
相关产品推荐
相关产品推荐

