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

时间:2017-12-28 17:17:36

标签: javascript floating-point numbers

我想从JavaScript中的数字中提取包含其值的最低有效数字(以便不丢失任何信息)

例如

12.0123323 - > 0.0000003

123299000 - > 9000

123001 - > 1

123001.01 - > 0.01

10000000 - > 10000000

等...

有没有一种巧妙的方法可以做到这一点?

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

3 个答案:

答案 0 :(得分:0)

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

Test Cases

它基本上遍历从右到左(toString)的数字的字符串表示(reduceRight),如果当前结果中已有数字(+res)则< / p>

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

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

如果您更喜欢可读代码:

+ res

答案 1 :(得分: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(''))

答案 2 :(得分:0)

您可以检查该值是否为整数,并选择其他替换架构以获取正确的最低有效值。

&#13;
&#13;
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));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;