如何隔离R中的小数后面的数字?

时间:2016-09-30 19:57:46

标签: r decimal digit isolation truncated

例如:我的号码是123.456,想要返回456。

函数trunc()基本上在小数之前隔离(truncates)数字

是否有一个函数可以在小数后隔离数字

两个后续问题:

  1. 有没有办法在不写出正则表达式的情况下执行此操作?

  2. 如果我想保持标志怎么办?例如,如果我想(反向)截断-123.456到-456。

3 个答案:

答案 0 :(得分:3)

我不喜欢这些操作的文本处理。

棘手的部分是将分数转换为整数。在这里我使用循环。不太可能需要多次迭代。因此,性能可能不是问题。

fun <- function(x) {
  y <- abs(x) - floor(abs(x))

  n <- 0
  while (abs(y - round(y, n)) > .Machine$double.eps^0.5) {
    n <- n + 1
  }

  sign(x) * y * 10^n
}

fun(123.456)
#[1] 456
fun(-123.456)
#[1] -456

答案 1 :(得分:2)

使用模数运算符(%%)和1作为指导工作我想。它确实成功地隔离了小数后面的数字,但是留下了小数:

123.456 %% 1
[1] 0.456

然而,它仅适用于正数,因为符号未被保留,也未报告正确的数字(模数运算符的功能的b / c):

-123.456 %% 1
[1] 0.544  #not what is wanted

包括abs()修正问题,但无法帮助报告问题。可以通过添加以下内容来包含签名:

sign(x) * (abs(x) %% 1)

答案 2 :(得分:1)

这是另一种方式

fmt