将非整数十进制数转换为二进制数

时间:2016-08-09 04:03:20

标签: r binary numeric

数据帧输入(DF)

a
123.213
4343.344
3434.43255
422.45
34534

二进制(16位)

所需的结果

我尝试了一个功能

intTobits
rawTobits

但是没有为我工作

1 个答案:

答案 0 :(得分:2)

this post中详细讨论了将整数十进制数转换为二进制数。非整数是一个不同的问题。

对于浮点十进制数的二进制表示,您可以尝试此函数:

floatToBin <- function(x){
  int_part <- floor(x)
  dec_part <- x - int_part
  int_bin <- R.utils::intToBin(int_part)
  dec_bin <- stringr::str_pad(R.utils::intToBin(dec_part * 2^31), 31, pad="0")
  sub("[.]?0+$", "", paste0(int_bin, ".", dec_bin)) 
}

请注意,此功能仅适用于非负数字。

这是问题中所示数字的输出:

nums <- c(123.213, 4343.344, 3434.43255, 422.45, 34534)
sapply(nums, floatToBin)
#[1] "1111011.0011011010000111001010110000001"     
#[2] "1000011110111.010110000001000001100010010011"
#[3] "110101101010.0110111010111011100110001100011"
#[4] "110100110.0111001100110011001100110011001"   
#[5] "1000011011100110"