javascript - 数字到字符串表示
问题描述
我正在尝试制作一个功能,以便:
1 000 000 变为 1m 100 000 000 变为 100m 999 000 000 变为 999m 1 000 000 000 变为 1b 100 000 000 000 变为 100b 1000 000 000 000 变为 1t
对 SO 进行一些研究后,我发现了一个非常接近的功能:
AbbreviateNumber = ({value}) => {
var suffixes = ["", "k", "m", "b","t"];
var suffixNum = Math.floor((""+ Math.trunc(value)).length/3);
var shortValue = parseFloat((suffixNum != 0 ? (value / Math.pow(1000,suffixNum)) :
value).toPrecision(2));
if (shortValue % 1 != 0) {
var shortNum = shortValue.toFixed(1);
};
return shortValue+suffixes[suffixNum];
};
该功能的问题在于:
AbbreviateNumber(100000000000)
返回 0.1t 而不是 100b。
我找不到正确的逻辑,因此它适用于 1 000 000 000 000 => 1t 和 100 000 000 000 => 100b 而不是 0.1t 或 100000 返回 100k 而不是 0.1m..
解决方案
可能是一些简单的方法,但这是一种文字方法。
function abbrNum(num) {
let mappings = {
K: [1000, 999999],
M: [1000000, 999999999],
B: [1000000000, 999999999999],
T: [1000000000000, 999999999999999],
};
let abs = Math.abs(num);
for (var abbr in mappings) {
if (abs >= mappings[abbr][0] && abs <= mappings[abbr][1]) {
return Math.round(num / mappings[abbr][0])+abbr;
}
}
return num;
}
推荐阅读
- go - “给定类型 int 的无类型常量索引”是什么意思?
- node.js - 如何解决迁移错误 env: node\r: from Gatbsy-images to Gatsby-plugin-images with gatsby-codemods?
- sftp - Rebex.net 认证调试
- excel - 在excel宏公式中粘贴剪贴板值
- python - 如何为 django 模型设置反之亦然条件
- excel - 如何复制过滤范围,然后使用 vba 在同一张表中粘贴该过滤范围而不是另一个过滤范围
- python - python中逗号交换的空间复杂度
- reactjs - 如何使用 React-Testing-Library 测试 mapDispatchToProps?
- informix - 如何使用 Uniface 9.7 更新一行
- ruby-on-rails - 使用 ActiveJob 为 sidekiq 作业手动设置当前执行/重试次数