如何根据值的小数更改.toFixed()?

时间:2018-04-01 09:39:17

标签: javascript

我想显示十进制数的值,包括最后两位(或任何)可见数字(0s旁边)。

以下是我要存档的示例:

Input: 1
Output: 1

Input: 0.1
Output: 0.1

Input: 0.000123
Output: 0.00012 //stripped down the "3", only show nearest 2 digits (12)

Input: 0.00102
Output: 0.0010 //stripped down the "2", only show nearest 2 digits (10)

Input: 0.000000100000000000000009999
Output: 0.00000010

我试图对它进行硬编码,但我认为它不可靠。有没有更好的方法呢?

function strip(val, length){
    var val = val.toString()
    var integer = val.split(".")[0]
    var decimals = val.split(".")[1]
    var reachedFirstDec = false
    var count = 0
    var result = ""
    var i = 0
    while (count !== length) {

        if (reachedFirstDec) {
            count++
        }

        if (decimals[i] !== "0" && !reachedFirstDec) {
            console.log(`Reached first non 0 character at ${i}`)
            reachedFirstDec = true
            count++
        }
        result = result + decimals[i]
        i++
        console.log(result);
    }
    return parseFloat(integer + "." + result)
}

感谢。

1 个答案:

答案 0 :(得分:1)

你可以取十个数字的对数,然后将toString调整为一,以获得想要的结果。

对于动态长度,你可以在数字的所需长度上使用闭包。



function x(l) {
    return function (v) {
        var e = Math.floor(Math.log10(v));
        return e < 0 ? v.toFixed(l - 1 - e) : v;
    }
}

var array = [1000, 1, 0.1, 0.0001232456, 0.0010234567, 0.000000100000000000000009999];

console.log(array.map(x(2)));
console.log(array.map(x(3)));
console.log(array.map(x(4)));
&#13;
&#13;
&#13;