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

时间:2014-10-30 16:54:22

标签: javascript angularjs

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

另一种选择是{{ mynumber | number:8 }},它会打印0.00000001。但是,如果我有0.1,则会打印出0.10000000

有没有办法在javascript / angular中格式化浮点数,以便只根据需要附加0?

1 个答案:

答案 0 :(得分:5)

您可以使用此过滤器:

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

并像这样使用它:

{{ mynumber | formatNumber }}

<强> DEMO



<强>更新

我注意到由于舍入错误,给定过滤器的结果并不总是正确的 这就是我创造一个新原因的原因:

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 (包括两种解决方案之间的比较。此处您还可以了解为什么您应该选择第二种过滤器。)