2016-08-19 68 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