📅  最后修改于: 2023-12-03 15:31:44.315000             🧑  作者: Mango
当我们的数据量很大时,经常需要把长数字转换成易读的形式,为了增强用户体验。例如,我们常常将1万以下的数字直接显示出来,但是超过1万的数字则需要转换为“X万”形式显示。当数字超过1亿时,我们可以把数字转换为“X亿”形式。其中,K (千)、M (百万)、B (十亿) 是目前最常见的计量单位。
在JavaScript中,我们可以使用一些简单的方法来更改长数字的单位。以下是一些可供选择的方法:
这是一种最简单、最常见的方法。全球通用的数字千位分隔符是逗号,而JavaScript可以使用Locale模块的toLocalString方法来输出数字的千位分隔符。在这个基础上,我们可以自己添加一个简单的函数去获取“K”和“M”前缀。
function formatNumber(num) {
if (num < 1000) return num.toString();
if (num < 1000000) return (num/1000).toFixed(1) + 'K';
return (num/1000000).toFixed(1) + 'M';
}
console.log(formatNumber(123)); // "123"
console.log(formatNumber(1234)); // "1.2K"
console.log(formatNumber(1234567)); // "1.2M"
JavaScript中的Number类包含toExponential()方法,该方法会将数字转换为科学计数法。然而,在使用这种方法时需要注意,需要小心保留合适的小数位数。
function formatNumber(num) {
var arr = num.toExponential().toString().split("e");
var format = parseFloat(arr[0]).toFixed(2) + (arr.length > 1 ? "e" + arr[1] : "");
if (format.split(".")[0].length < 3) {
return format;
}
return format.replace(/\B(?=(\d{3})+(?!\d))/g, ","); // 增加千位分隔符
}
console.log(formatNumber(123)); // "123"
console.log(formatNumber(1234)); // "1.23e+3"
console.log(formatNumber(1234567)); // "1.23e+6"
Math.log10()函数可以计算以10为底的对数,因此,我们可以利用这个函数将数值转换到一个对数范围内。然后,我们可以根据对数范围的值,创建一个对应的前缀数组,最后返回一个计算后带有合适前缀的字符串。
function formatNumber(num) {
if (num < 1000) return num.toString();
var prefixArr = ['', 'K', 'M', 'B', 'T', 'P', 'E'];
var prefixIndex = Math.floor(Math.log10(num) / 3);
var shortValue = (num / Math.pow(1000, prefixIndex)).toFixed(2);
return shortValue + prefixArr[prefixIndex];
}
console.log(formatNumber(123)); // "123"
console.log(formatNumber(1234)); // "1.23K"
console.log(formatNumber(1234567)); // "1.23M"
无论你使用哪种方法,只要能让用户更加友好地显示数据就可以了。如果你还知道其他的方法,请在评论区分享!