如何在JavaScript中求各类数字的最后六位(含指数形式)?
获取数字最后六位的JavaScript实现
先帮你搞懂e+是什么:这是科学计数法的写法,比如1.359801885649216e+34,意思是把前面的1.359801885649216乘以10^34(10的34次方)——说白了就是把小数点往右移34位,展开后是一个超级大的数,最后六位确实是000000。
接下来针对不同情况,给你两种可靠的实现方式:
方式一:简单取模(适合普通精度内的整数)
如果你的数字是普通整数(比如21、12345678,数值不超过9007199254740991,也就是2^53-1),直接用取模运算% 1000000就能拿到最后六位的数值:
const num1 = 21; console.log(num1 % 1000000); // 输出 21 const num2 = 12345678; console.log(num2 % 1000000); // 输出 345678
不过这种方法有个局限:如果数字是超大数或者科学计数法格式,JavaScript的Number类型会丢失精度,导致结果不准确。比如你例子里的1.359801885649216e+34,用Number存储时已经被近似了,取模会得到错误结果。
方式二:字符串处理(通用所有情况)
不管是科学计数法、超大数还是普通数字,转成字符串处理是最稳妥的,能避免精度丢失。这里写一个通用函数:
function getLastSixDigits(num) { let str = num.toString(); // 处理科学计数法格式 if (str.includes('e')) { const [coefficient, exponentPart] = str.split('e'); const exponent = parseInt(exponentPart); // 去掉系数里的小数点,比如把"1.3598..."变成"13598..." const coeffStr = coefficient.replace('.', ''); let integerStr; if (exponent >= coeffStr.length - 1) { // 指数足够大,直接在系数后补零 const zerosToAdd = exponent - (coeffStr.length - 1); integerStr = coeffStr + '0'.repeat(zerosToAdd); } else { // 指数较小,取整数部分(比如1.234e+2 → 123) integerStr = coeffStr.slice(0, exponent + 1); } str = integerStr; } else { // 普通数字,只保留整数部分 str = str.split('.')[0]; } // 取最后六位,不够六位补前导零 const lastSix = str.slice(-6); return lastSix.padStart(6, '0'); } // 测试你的例子 console.log(getLastSixDigits(21)); // 输出 "000021"(如果想要不带前导零的,直接返回lastSix即可) console.log(getLastSixDigits(12345678)); // 输出 "345678" console.log(getLastSixDigits(1.359801885649216e+34)); // 输出 "000000"
如果你的数字是超大整数(超过2^53),建议用BigInt类型存储(数字末尾加n),再转字符串处理,避免精度丢失:
const hugeNum = 123456789012345678901234567890n; console.log(getLastSixDigits(hugeNum)); // 输出 "567890"
小补充
如果你不需要前导零(比如希望21输出"21"而不是"000021"),可以把函数最后一行改成return lastSix;就行。
内容的提问来源于stack exchange,提问作者iremlopsum
相关产品推荐
相关产品推荐

