在 javascript 中将数字美化为末尾带零的最接近数字

Prettify numbers to their closest number with zeros at the end in javascript

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

// 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

我将乘法器的比较从 10 * 更改为 100 * 以获得系列 0 之前的 2 位数字的精度。

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

您可以使用有效数字,设置 sf(我设置为 3)然后只显示前 3 个数字。

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));