我正在使用sprintf
输出一个数字。数字可以是整数或浮点数。
出于某种原因,如果数字是浮点数,我需要在小数点后保留三位数,同时直接输出整数。
例如,如果数字为3
,则应输出3
。如果数字为3.333333
,则应输出3.333
。如何使用sprintf()
格式化字符串,还是有其他方法?
答案 0 :(得分:1)
Carlos Cinelli的答案非常优雅。它是正确的,因为它测试实际数据类型是否为整数。但是,如果shapeare只想测试数字是一个"整数",也就是说,没有小数位,以下解决方案可能会更好:
is.wholenumber <- function(x, tol = .Machine$double.eps^0.5) abs(x - round(x)) < tol
f <- function(x) sprintf(ifelse(is.wholenumber(x),"%i", "%.3f"), x)
这样,如果它是整数(又称整数):
f(3)
[1] "3"
我在 is.integer 的帮助页面上的示例中获得了全数功能。
答案 1 :(得分:0)
您可以进行条件格式化:
f <- function(x) sprintf(ifelse(is.integer(x),"%i", "%.3f"), x)
如果是整数:
f(3L)
[1] "3"
如果是浮点数:
f(3.3333333)
[1] "3.333"