十进制转换为四进制(以4为底)?

时间:2018-09-04 18:40:49

标签: r

是否有一个R程序可以将小数转换为0到1之间的小数到4的基数(四进制)?我尝试在网上查找,但没有任何运气。谢谢。

2 个答案:

答案 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

Cantor扩展:

# 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

以整数为底的浮点扩展,数字在0到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