全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1605 3
2020-06-28
之所以新发一贴,是想着与更多同学更方便地交流。

自编的三个函数:
1、求两个整数的最大公约数
2、有限小数处理(参数A是输入小数)
3、无限循环小数处理(参数B是输入小数, L是循环节的位数)

#加载个包

library(stringr)

#求两个整数的最大公约数------------------------------
maxcf <- function (a, b) {
  if (a < b) {
    while (b %% a != 0) {
      c <- b %% a
      b <- a
      a <- c
    }
    c <- a
  }
  else {
    while (a %% b != 0) {
      c <- a %% b
      a <- b
      b <- c
    }
    c <- b
  }
  c
}

#有限小数处理,参数A是输入小数----------------------------
dc2frc <- function (A) {
  #小数部分
  decp <- as.numeric(str_extract(as.character(A), "(?<=\\.)\\d+"))
  dvid <- 10 ^ (str_length(decp))
  
  paste(
    as.character(A),
    "的整数部分为",
    as.character(floor(A)),
    ",",
    "小数部分化为分数",
    as.character(decp / maxcf(decp, dvid)),
    "/",
    as.character(dvid / maxcf(decp, dvid))
  )
}

#无限循环小数处理,参数B是输入小数,L是循环节的位数-----------
dlp2frc <- function (B, L) {
  #小数部分
  dcp <- as.numeric(str_extract(as.character(B), "(?<=\\.)\\d+"))
  
  if (str_length(dcp) == L) {
    dvd <- (10 ^ L) - 1
   
    paste(
      as.character(B),
      "循环节为",
      as.character(dcp),
      "的整数部分为",
      as.character(floor(B)),
      ",",
      "小数部分化为分数",
      as.character(dcp / maxcf(dcp, dvd)),
      "/",
      as.character(dvd / maxcf(dcp, dvd))
    )
  }
  
  else {
    nlp <-
      as.numeric(str_trunc(as.character(dcp), (str_length(dcp) - L), "right", ellipsis = ""))
    lp <-
      as.numeric(str_trunc(as.character(dcp), L, "left", ellipsis = ""))
    dvd <- ((10 ^ L) - 1) * (10 ^ str_length(nlp))
   
    paste(
      as.character(B),
      "循环节为",
      as.character(lp),
      "的整数部分为",
      as.character(floor(B)),
      ",",
      "小数部分化为分数",
      as.character((dcp - nlp) / maxcf((dcp - nlp), dvd)),
      "/",
      as.character(dvd / maxcf((dcp - nlp), dvd))
    )
   
  }
}

#测试数据-----------------------------------------------------------
dc2frc(3.1415)
dc2frc(3.5)
dc2frc(1.95)

dlp2frc(3.2134,4)
dlp2frc(3.2134,3)
dlp2frc(3.2134,2)
dlp2frc(3.2134,1)
dlp2frc(1.9876543,7)

#另外再送一个函数吧
#求两个整数的最小公倍数---------------------------------------------
maxcm<-function (a,b) {
    a * b / maxcf(a,b)
}

#------------------------------------------------------EOF


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-6-28 23:03:52
最大公约数,DescTools包有个GCD函数也可以求:)  
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-6-28 23:32:04
megapanda 发表于 2020-6-28 23:03
最大公约数,DescTools包有个GCD函数也可以求:)
谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-6-30 20:08:02
经luzifer_li提醒,MASS包fractions()可以实现有限小数化分数。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群