2014-10-30 57 views
1

我有極小的數字,即0.00000001 - 如果我只是做{{ mynumber }}我得到1e-8的輸出。AngularJs格式化非常小的十進制數(1e-8)

另一種選擇是做{{ mynumber | number:8 }}這將打印出0.00000001。但是,如果我有0.1,它會打印出0.10000000

有沒有一種方法來格式化javascript/angular中的浮點數,以便只根據需要添加0?

+2

聽起來像你應該寫你自己的過濾器 – 2014-10-30 17:00:11

回答

5

您可以使用此過濾器:

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

而且使用這樣的:

{{ mynumber | formatNumber }} 

DEMO



UPDATE

我已經注意到了,因爲舍入誤差給定的過濾器的結果是不總是正確的。
這就是爲什麼我提出一個新問題:

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(包括兩個方案之間的comparsion在這裏還可以看到爲什麼你應該更喜歡第二個過濾器)。