how to return number of decimal places in R

前端 未结 12 1151
走了就别回头了
走了就别回头了 2020-12-01 08:25

I am working in R. I have a series of coordinates in decimal degrees, and I would like to sort these coordinates by how many decimal places these numbers have (i.e. I will w

12条回答
  •  南方客
    南方客 (楼主)
    2020-12-01 08:40

    Don't mean to hijack the thread, just posting it here as it might help someone to deal with the task I tried to accomplish with the proposed code.

    Unfortunately, even the updated @daroczig's solution didn't work for me to check if a number has less than 8 decimal digits.

    @daroczig's code:

    decimalplaces <- function(x) {
        if (abs(x - round(x)) > .Machine$double.eps^0.5) {
            nchar(strsplit(sub('0+$', '', as.character(x)), ".", fixed = TRUE)[[1]][[2]])
        } else {
            return(0)
        }
    }
    

    In my case produced the following results

    NUMBER / NUMBER OF DECIMAL DIGITS AS PRODUCED BY THE CODE ABOVE
    [1] "0.0000437 7"
    [1] "0.000195 6"
    [1] "0.00025 20"
    [1] "0.000193 6"
    [1] "0.000115 6"
    [1] "0.00012501 8"
    [1] "0.00012701 20"
    

    etc.

    So far was able to accomplish the required tests with the following clumsy code:

    if (abs(x*10^8 - floor(as.numeric(as.character(x*10^8)))) > .Machine$double.eps*10^8) 
       {
       print("The number has more than 8 decimal digits")
       }
    

    PS: I might be missing something in regard to not taking the root of the .Machine$double.eps so please take caution

提交回复
热议问题