这是我的代码:
function engineeringNotation(number) {
var space = ' ';
// Giga
if(number >= 1e10)
return (number / 1e9).toFixed(1) + space + 'G';
else if(number >= 1e9)
return (number / 1e8).toFixed(0) / 10 + space + 'G';
// Mega
else if(number >= 1e7)
return (number / 1e6).toFixed(1) + space + 'M';
else if(number >= 1e6)
return (number / 1e5).toFixed(0) / 10 + space + 'M';
// Kilo
else if(number >= 1e4)
return (number / 1e3).toFixed(1) + space + 'k';
else if(number >= 1e3)
return (number / 1e2).toFixed(0) / 10 + space + 'k';
// Unit
else if(number >= 1e1)
return (number / 1e0).toFixed(0) + space + '';
else
return (number / 1e-1).toFixed(0) / 10 + space + '';
}
基本上,它需要一个数字,并以“工程符号”将其返回到小数点后一位。例如,1234
变为1.2 k
。我觉得我在重复自己。上述代码可以改进并干掉吗?
答案 0 :(得分:2)
只是实施(一些)Pointy的想法,这不是最优化的方法,但它应该让你开始。
function engineeringNotation(number) {
var unitMap = {G:1e9,M:1e6,k:1e3};
var space = ' ';
for(var unit in unitMap) {
if(unitMap.hasOwnProperty(unit)) {
if(number >= unitMap[unit]*10) {
return (number / unitMap[unit]).toFixed(1) + space + unit;
}
if(number >= unitMap[unit]) {
return (number / unitMap[unit]/10).toFixed(0) / 10 + space + unit;
}
}
}
}