AngularJs格式化极小的十进制数字(1e-8)

AngularJs formatting extremely small decimal numbers (1e-8)

本文关键字:1e-8 十进制数字 格式化 极小 AngularJs      更新时间:2023-09-26

我有一个非常小的数字,即0.00000001——如果我只做{{ mynumber }},我会得到1e-8的输出。

另一种选择是执行{{ mynumber | number:8 }},它将打印出0.00000001。然而,如果我有0.1,它会打印出0.10000000

有没有一种方法可以在javascript/angular中格式化浮点值,以便只在需要时附加0?

您可以使用以下过滤器:

app.filter('formatNumber', function() {
    return function(value) {
        return value.toFixed(20).replace(/0+$/, '')
    };
});

并像这样使用:

{{ mynumber | formatNumber }}

演示



更新

我注意到,由于舍入误差,给定滤波器的结果并不总是正确的
这就是为什么我做了一个新的:

app.filter('formatNumber', function() {
    return function(value) {
        var v = value.toString(),
            m = v.match(/(.*)e-('d)/);
        return m ? '0.' + new Array(parseInt(m[2], 10)).join('0') + m[1].replace('.', '') : v;      
    };
});

这是DEMO(包括两种解决方案之间的比较。在这里,您还可以看到为什么您更喜欢第二种过滤器)。