干掉工程符号实现

时间:2013-02-14 15:04:41

标签: javascript

这是我的代码:

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。我觉得我在重复自己。上述代码可以改进并干掉吗?

1 个答案:

答案 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;
            }
        }
    }
}