2016-08-19 60 views
0

我在尋找一個R功能,如sprintf,它可以輕鬆格式化小數點兩側的輸出。我知道%04d可用於整數,%04d格式化十進制數前的小數,而%04f格式化小數點後的小數,但我似乎無法想出一個優雅的方式來格式化每一邊(幸運的是,想到一些醜陋的方式)。有沒有簡單的方法?我想要的輸出:格式化功能強制小數點每一側的數字長度

1 becomes 01.00 
4.2 becomes 04.20 
12.3 becomes 12.30 
42.42 remains as is 

謝謝!!

回答

2

作爲由@nrussell的r sprintf()功能指出的是足夠的:

sprintf("%05.2f",x) 

在格式指示符序列05.2指示表示爲浮點(f)的數量的輸出應該被填充到以0結尾,以便生成的字符串至少包含5個字符,並且應在小數點後顯示兩位數字。


更令人費解的版本,將它從stringrstr_pad()功能結合起來。在這種情況下,與僅使用sprintf()的解決方案相比,它沒有優勢。我只是爲了完整而添加它,因爲這是我提出的解決方案。

x <- c(1, 4.2, 12.3, 42.42) 
stringr::str_pad(sprintf("%.2f",x), 5, pad="0") 
#[1] "01.00" "04.20" "12.30" "42.42" 

傳遞給str_pad()函數的參數「5」表示字符串的長度(寬度)。

+1

另外,'sprintf(「%05.2f」,...)'應該可以正常工作。 – nrussell

+0

@nrussell謝謝。遊民。我認爲sprintf就足夠了,至少那是我的第一個答案。不知何故,我錯過了包含前導零的選項。你應該發佈這個答案,我不配得分。 – RHertel

+1

沒關係我不想寫一個答案。 「printf」中的前導數字後綴的語法無疑有點令人困惑; <填充字符><總位數,包括小數點><.><小數點右邊的位數>。 – nrussell