2016-08-15 49 views
2

我有一些可變長度的看起來是這樣的:固定長度的數量以及

48.4532

我想將它轉換爲十進制前4位和2位小數,所以數上面應該是:

0048.45

我也不想表現出小數,除非他們是必要的,因此:

48

應該變成:

0048

我能得到固定長度,但我無法得到的小數現身,只有當他們是必要的(我不想在最後顯示兩個0)。

這是我得到了一個固定長度:

trackPartLength = ("0000" + trackPartLength.toString()).slice(-4); // Convert to fixed length 

如何添加僅在需要時2個小數點?

編輯:我也剛剛意識到,如果數字確實帶有上述代碼的小數點,它會將小數點移動超過4個點,導致其他問題,所以我不確定我的初始方法是否合適。我正在嘗試修改可變固定前綴和小數長度的固定長度函數。

+0

看到這裏http://stackoverflow.com/questions/2686855/is-there-a-javascript-function-that-c​​an-pad-a-string-to-get -to-一個待定lengt。另外檢查[toFixed](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) – elclanrs

+1

是你添加的前導零應該使它成爲一個四位數字,還是要添加它們,即使該數字已經在小數點左邊有四位或更多位數?換句話說,輸入'100.11'和'1000.22'應該輸出什麼? – nnnnnn

回答

1

這應該工作:

trackPartLength = ("0000" + trackPartLength.toFixed(2)).slice(-7).replace(/\.00$/, ''); 

它使用toFixed拿到兩個小數點,零填充,然後刪除任何尾隨.00。例子:

48.4532  -> 0048.45 
48   -> 0048 
6.213  -> 0006.21 
12345  -> 2345 
1234.56789 -> 1234.57 

如果這個數字可以在小數點前有超過四位數,如12345例如,您可能希望使零填充和切片的條件,讓你不從刪除前幾位數字一個很大的數字。可以做這樣的:

var tmp = trackPartLength.toFixed(2); 
trackPartLength = (tmp.length >= 7 ? tmp : ('0000' + tmp).slice(-7)).replace(/\.00$/, ''); 
+0

可能應該使用'/(\。00)| 0 $ /'(或類似的)來允許'0001.20' – nnnnnn

+0

@nnnnnn我不清楚OP是否希望輸出爲「0001.2」或「0001.20」那種情況。 「我也不想顯示小數,除非它們是必要的」有點含糊不清(因爲不清楚它們是指所有小數還是單個小數),並且他們只給出兩個例子顯示兩個'0'。 – Paulpro

+0

@nnnnnn雖然這個建議是好的,但是這個特定的正則表達式可能會遇到像'50'這樣的輸入問題,因爲它會在那裏去掉'0'。類似於'.replace(/\.00/,'').replace(/(\.\d)0/,'$ 1')'會更好。 – Paulpro