例如:我的号码是123.456,想要返回456。
函数trunc()
基本上在小数之前隔离(truncates)数字。
是否有一个函数可以在小数后隔离数字?
两个后续问题:
有没有办法在不写出正则表达式的情况下执行此操作?
如果我想保持标志怎么办?例如,如果我想(反向)截断-123.456到-456。
答案 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