javascript - 按小数位格式化数字

标签 javascript arrays algorithm math split

我正在尝试转换一组数字,使每个数字只有一个非零数字。 所以基本上

"7970521.5544"

会给我

 ["7000000", "900000", "70000", "500", "20", "1", ".5", ".05", ".004", ".0004"]

我试过:

  var j = "7970521.5544"

  var k =j.replace('.','')

  var result = k.split('')

  for (var i = 0; i < result.length; i++) {
  console.log(parseFloat(Math.round(result[i] * 10000) /10).toFixed(10))
}

任何想法,我不确定从这里去哪里?

最佳答案

算法:

  • Split使用十进制表示法将数字分为两部分。

  • 运行一个 for 循环,将每个数字乘以相应的 10 次幂,例如:

    value = value * Math.pow(10, index); // for digits before decimal
    value = value * Math.pow(10, -1 * index); // for digits after decimal
    

  • 然后,filter非零元素和 concat enate 两个数组。 (记得重新reverse左边的数组)

    var n = "7970521.5544"
    
    var arr = n.split('.'); // '7970521' and '5544'
    var left = arr[0].split('').reverse(); // '1250797'
    var right = arr[1].split(''); // '5544'
    
    for(let i = 0; i < left.length; i++)
      left[i] = (+left[i] * Math.pow(10, i) || '').toString();
    
    for(let i = 0; i < right.length; i++) 
      right[i] = '.' + +right[i] * Math.pow(10, -i);
    
    let res = left.reverse() // reverses the array
      .filter(n => !!n) 
    // ^^^^^^ filters those value which are non zero
      .concat(right.filter(n => n !== '.0'));
    // ^^^^^^ concatenation
      
    console.log(res);

  • 关于javascript - 按小数位格式化数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636724/

    相关文章:

    javascript - 使用 AJAX 但仍然允许在 Rails 中使用 $(document).ready

    python - Numpy 根据另一个数组的值分配一个数组值,并根据向量选择列

    arrays - 声明多个SPIM数组会导致语法错误

    algorithm - 在矩形的周长上生成一个均匀分布的随机点

    c++ - 如何在两个容器的元素之间执行成对二元运算?

    algorithm - 查找所有此类不同元组的计数,(i, j, k) 其中 (i*j)%k == 0

    javascript - 数组中音频的未定义错误

    javascript - JavaScript 'bind' 方法有什么用?

    javascript - 基准测试/测试 fastclick.js

    使用数组将 C 代码转换为 MIPS 汇编语言