如何返回一个数字的字符串与1小数和其他没有小数点?



在JS中,我想为特定值输出一个带有1位小数点的字符串,而其他值将是整数(例如999999 = "999.9k",500000 = "500k"1000000 = 1M)。相反,我得到:999999 = "1000.0k",500000 = "500.0k"1000000 = 1.0M

这是我尝试过的:

function formatLargeNumber(n) {
let s = "";
if (n < 1000) {
s += n;
} else if (n >= 1000 && n < 1000000) {
s += (Math.round(n)/1000).toFixed(1) + "k"
} else if (n >= 1000000) {
s += (Math.round(n)/1000000).toFixed(1) + "M"
} 
return s
};

我已经尝试使用Math.trunc,但它输出的值,如499999等于499.999k

我可以先将结果转换为字符串,然后用'拆分它。'字符,并添加一些if else语句,无论我是否想显示小数点,但我不确定如何将其写出来。

这是我在https://www.codexworld.com/how-to/convert-file-size-bytes-kb-mb-gb-javascript/

找到的东西

// from https://www.codexworld.com/how-to/convert-file-size-bytes-kb-mb-gb-javascript/
function formatFileSize(bytes,decimalPoint) {
if(bytes == 0) return '0 Bytes';
var k = 1000,
dm = decimalPoint || 2,
sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}
[123,3347,2234556,12345342355,123423444332,234.5678e15].forEach(n=>console.log(formatFileSize(n,1)))

脚本的定制版本将截断给定长度后的小数(而不是四舍五入数字),如下所示:

// from https://www.codexworld.com/how-to/convert-file-size-bytes-kb-mb-gb-javascript/
function formatFileSize(bytes,decimalPoint) {
if(bytes == 0) return '0 Bytes';
var k = 1000,
dm = decimalPoint || 2,
sizes = ['', ' k', ' m', ' g', ' t', ' p', ' e', ' z', ' y'],
i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i))).toFixed(8).slice(0,dm-8).replace(/.0*$/,"") + sizes[i];
}
[123,3347,2234556,12993453455,123063444332,234.5678e15].forEach(n=>console.log(formatFileSize(n,1)))

使用上述解决方案生成满足OP要求的代码片段后,我想指出,它计算数量的方式不符合存储大小单位的实际定义(见这里)。单位之间的因子实际上应该是1024(2^10),而不是1000(10^3)。

相关内容

最新更新