代码之家  ›  专栏  ›  技术社区  ›  Süha Boncukçu

在javascript中,用零将数字修饰为最接近的数字

  •  0
  • Süha Boncukçu  · 技术社区  · 7 年前

    我有一些区块,如下例所示:

    // lowest and highest values of chunk arrays
    [
        [0, 945710.3843175517],
        [945710.3843175517, 2268727.9557668166],
        [2268727.9557668166, 14965451.25314727],
        [14965451.25314727, 17890252.39415521],
        [17890252.39415521, 3501296406.880383]
    ]
    

    我想从这些块中得到如下内容:

    < 1.000.000
    1.000.000 - 3.000.000
    3.000.000 - 15.000.000
    15.000.000 - 18.000.000
    > 10.000.000
    

    我将使用这些新数字作为信息地图的图例。

    我使用一个函数来实现这个目标,名为 roundClosestLegendNumber 对于每个值。

    所有数字都是正数,没有最大限制。

    roundClosestLegendNumber(5) \\ should give 10
    roundClosestLegendNumber(94) \\ should give 100
    roundClosestLegendNumber(125) \\ should give 200
    roundClosestLegendNumber(945710.3843175517) \\ should give 1000000 
    roundClosestLegendNumber(14965451.25314727) \\ should give 15000000
    roundClosestLegendNumber(17890252.39415521) \\ should give 18000000
    // and so on
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   kalsowerus    7 年前

    我将乘数的比较从 10 * 100 *

    var roundClosestLegendNumber = function(number) {
        if(number < 10) {
            return number;
        }
    
        var multiplier = 10;
        while(number >= 100 * multiplier) {
            multiplier = 10 * multiplier;
        }
    
        count = 1;
        while(number > multiplier * count) {
            count++;
        }
    
        return multiplier * count;
    }
    
        2
  •  0
  •   Andrew Bone    7 年前

    function sigFigure(v) {
      let sf = 3;
      if (v >= Math.pow(10,sf)) {
        let number = v.toPrecision(sf);
        let numbers = number.split("e+")
        return parseInt((numbers[0]*Math.pow(10,numbers[1])).toFixed(0));
      } else {
        return v
      }
    }
    
    var array = [0, 945710.38431755, 2268727.9557668166, 14965451.25314727, 17890252.39415521, 3501296406.880383];
    
    console.log(array.map(sigFigure));