是否有一个R程序可以将小数转换为0到1之间的小数到4的基数(四进制)?我尝试在网上查找,但没有任何运气。谢谢。
答案 0 :(得分:1)
Windows用户可以使用我的expansions
软件包。要安装:
devtools::find_rtools()
devtools::install_github('stla/expansions', build_vignettes=TRUE)
或从我的drat
回购中:
devtools::find_rtools()
drat::addRepo("stlarepo")
install.packages("expansions")
或下载zip文件here并安装。
您对floatExpand01
函数(floatExpand01(x, base=4)
)感兴趣。
n <- 14
(n_to_base3 <- intAtBase(n, base=3) )
## [1] 2 1 1
sum(n_to_base3*c(1,3,3^2)) == n
## [1] TRUE
# Cartesian product {0,1}x{0,1,2}x{0,1}:
sapply(0:11, function(x) intToAry(x, sizes=c(2,3,2)))
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 0 1 0 1 0 1 0 1 0 1 0 1
## [2,] 0 0 1 1 2 2 0 0 1 1 2 2
## [3,] 0 0 0 0 0 0 1 1 1 1 1 1
x <- 0.625
( x_to_base2 <- floatExpand01(0.625, base=2) )
## [1] 1 0 1
sum(x_to_base2 / 2^(1:3)) == x
## [1] TRUE
x <- 1.125
( x_to_base2 <- floatExpand(1.125, base=2) )
## $digits
## [1] 1 0 0 1
##
## $exponent
## [1] 1
sum(x_to_base2$digits / 2^(1:4)) * 2^x_to_base2$exponent == x
## [1] TRUE
sumadic(c(0,1,1), c(1,0,1), base=2)
## [1] 1 1 0 1
http://stla.github.io/stlapblog/posts/expansions_package.html
答案 1 :(得分:0)
一种可能的解决方案是获取十进制数字的字符串长度。例如,如果x = 0.012
,则str_length(as.character(x)) - 2 = 3
。因此,我们将x
乘以10^3
,然后应用通常的算法将一个基数转换为另一个基数。参见here。