将数字作为逗号分隔的字符串返回

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数字作为逗号分隔的字符串返回相关的知识,希望对你有一定的参考价值。

Background

由于bug in Renjinformat系列功能不可用,但sprintf工作。

Code

这是一个替换函数,它将数字转换为逗号分隔的字符串:

commas <- function( n ) {
  s <- sprintf( "%03.0f", n %% 1000 )
  n <- n %/% 1000

  while( n > 0 ) {
    s <- concat( sprintf( "%03.0f", n %% 1000 ), ',', s )
    n <- n %/% 1000
  }

  gsub( '^0*', '', s )
}

Question

虽然代码完成了工作,但如何加快实施?也就是说,如何编写代码以便使用R语言(不使用formatformatCprettyNum等)并且没有破坏Renjin packages(即没有依赖关系)?

答案

有一个光滑的单行程序,您可以使用它将数千个逗号分隔符添加到数字的整数位,而不将它们添加到小数部分。使用str_replace_all包中的stringr,我们可以使用:

num <- "1234567890.12345"
str_replace_all(num, "[0-9](?=(?:[0-9]{3})+(?![0-9])(?=\.))", "\0,")
[1] "1,234,567,890.12345"

Demo

另一答案

不幸的是,许多人人包都没有完全实现,所以在修复到位之前,问题中的代码是一个体面的工作:

commas <- function( n ) {
  s <- sprintf( "%03.0f", n %% 1000 )
  n <- n %/% 1000

  while( n > 0 ) {
    s <- concat( sprintf( "%03.0f", n %% 1000 ), ',', s )
    n <- n %/% 1000
  }

  gsub( '^0*', '', s )
}

以上是关于将数字作为逗号分隔的字符串返回的主要内容,如果未能解决你的问题,请参考以下文章

当某些数字包含逗号作为千位分隔符时如何读取数据?

如何在数字字段的条件下将逗号分隔的数字字符串传递给存储过程?

Javascript:以逗号分隔的字符串搜索数字的最佳方式

我试图在数字数组上使用 .filter、.sort 和 .reduce 以返回由逗号和空格分隔的字符串

使用逗号分隔符的表格排序不起作用

逗号代码和字符图网格