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

标签 javascript

<分区>

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

以下是我要存档的示例:

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

谢谢。

最佳答案

您可以取该数的 10 的对数并将 toString 调整 1 以获得想要的结果。

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

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

关于javascript - 如何根据值的小数点更改 .toFixed()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49596735/

相关文章:

javascript - React传单标记标题不更新

javascript - 将参数从按钮单击传递到 Jquery 事件处理程序

javascript - AJAX 请求后的 JQuery 确认对话框

javascript - 将多个操作绑定(bind)到事件监听器时的性能问题

javascript - 所有字谜 - 递归

javascript - 图像预加载器如何工作?

javascript - 恢复页面内容并保留事件监听器

javascript - Flask - 每个模板都有不同的 Javascript 文件

javascript - 加载 Angular 应用程序时,Chrome devtools 挂起

javascript - Knockout JS 模板 attr href 绑定(bind)返回函数而不是值