获取最低有效数字,包括其在JavaScript中的值

问题描述 投票:2回答:3

我想从JavaScript中的数字中提取最低有效数字,包括其值(这样就不会丢失任何信息)

例如

12.0123323 - > 0.0000003

123299000 - > 9000

123001 - > 1

123001.01 - > 0.01

10000000 - > 10000000

等等...

有一个巧妙的方法来做到这一点?

编辑:正如人们已经注意到因为Javascript:s处理数字的方式它不能代表12.0123323,所以让我们假设它是那些极端情况下的字符串。

javascript floating-point numbers
3个回答
0
投票

您可以检查该值是否为整数,并选择不同的替换模式以获取正确的最低有效值。

function least(x) {
    return x === Math.floor(x)
        ? +x.toString().replace(/.*(?=[1-9]0*$)/, '')
        : +x.toString().replace(/\d(?=.*[1-9]$)/g, '0');

}

var array = [
        12.0123323, // 0.0000003
        123299000,  // 9000
        123001,     // 1
        123001.01,  // 0.01
        10000000    // 10000000
    ];

console.log(array.map(least));
.as-console-wrapper { max-height: 100% !important; top: 0; }

0
投票
 const least = num => [...num.toString()].reduceRight((res, d, i) => (+res ? (d === "." ? "." : "0") : d) + res, "");

Test Cases

它基本上遍历从右到左(toString)的数字的字符串表示(reduceRight),如果当前结果已经有一个数字(+res)然后

  d === "." ? "." : "0"

它接管点或将任何其他数字转换为0.如果还没有数字(:),它只是添加当前的一个d,并附加已经遍历的部分+ res


如果您更喜欢可读代码:

 function least(num){
  var res = "";
  for(var char of num.toString().split("").reverse()){
    if(+res){
      res = (char === "." ? "." : "0") + res;
    } else {
      res = char + res;
    }
  }
  return res;
}

0
投票
var foundNonzero = false
Number("324.034"
.split('')
.reverse()
.map((i)=>{
    if(i==='.') return i
    if(foundNonzero) return '0'
    if(i!=='0'){
        foundNonzero = true 
    }
    return i
}).reverse().join(''))
© www.soinside.com 2019 - 2024. All rights reserved.