首页 > 解决方案 > 如何在 R Shiny 中将数字格式更改为印度数字系统?

问题描述

我正在尝试使用 Shiny 在 R 中构建仪表板,在其中一个值框输出中我显示了一个数字。我想根据印度数字系统更改格式。值框输出当前显示的数字为 123,456,789,我想将其表示为 12,34,56,789。

如果需要更多信息,请告诉我,任何帮助将不胜感激。

标签: rshiny

解决方案


这是一个快速破解,允许进一步使用format大多数其他功能。它所做的唯一干预是检查是否有有效数字需要保证

format2 <- function(x, ..., big.mark = "", big.interval = c(3L, 2L), decimal.mark = ".") {
  intervene <- (log(abs(x), 10) >= sum(big.interval)) && nzchar(big.mark)
  cl <- match.call()
  cl[[1]] <- substitute(format)
  if (intervene) {
    cl$x <- x %/% 10^big.interval[1]
    cl$big.interval <- big.interval[2]
    bigx <- eval.parent(cl)
    cl$x <- x 
    cl$big.interval <- big.interval[1]
    mostx <- eval.parent(cl)
    mostx <- 
      substr(mostx,
             1L + nchar(x %/% 10^big.interval[1]) +
               trunc(trunc(log(abs(x %/% 10^big.interval[1]), 10L)) / big.interval[1]),
             nchar(mostx))
    return( paste0(bigx, mostx) )
  } else eval.parent(cl)
}

format2(123456789)
# [1] "123456789"
format2(12345, big.mark = ",") # no intervene necessary
# [1] "12,345"
format2(123456789, big.mark = ",")
# [1] "12,34,56,789"
format2(1e6 + pi, big.mark = ",")
# [1] "10,00,003"
format2(1e6 + pi, big.mark = ",", digits = 22)
# [1] "10,00,003.1415926536"
format2(1e6 + pi, big.mark = ",", digits = 22, small.mark = ",")
# [1] "10,00,003.14159,26536"

免责声明:我当然没有对此进行严格的测试,因此它可能有未涵盖的极端情况是可行的。买者自负。


推荐阅读