【问题标题】:adding or retaining leading zeros without converting to character format添加或保留前导零而不转换为字符格式
【发布时间】:2013-09-26 17:06:29
【问题描述】:

是否可以在数字中添加或保留一个或多个前导零而不将结果转换为字符?我发现的每个添加前导零的解决方案都会返回一个字符串,包括:pasteformatCformatsprintf

例如,x 可以是012300123 等,而不是123 并且仍然是数字吗?

x <- 0123

编辑

这不是必需的。我只是在玩下面的代码,最后两行给出了错误的答案。我只是想也许如果我可以使用数字格式的前导零获得正确的答案会更容易。

a7   = c(1,1,1,0); b7=c(0,1,1,1);  # 4
a77  = '1110'    ; b77='0111'   ;  # 4
a777 =  1110     ; b777=0111    ;  # 4

length(b7[(b7 %in% intersect(a7,b7))])

R - count matches between characters of one string and another, no replacement

keyword <- unlist(strsplit(a77, ''))
text    <- unlist(strsplit(b77, ''))
sum(!is.na(pmatch(keyword, text)))

ab7 <- read.fwf(file = textConnection(as.character(rbind(a777, b777))), widths = c(1,1,1,1), colClasses = rep("character", 2))
length(ab7[2,][(ab7[2,] %in% intersect(ab7[1,],ab7[2,]))])

【问题讨论】:

  • 这在什么意义上会有所作为?我的意思是,为什么它必须是数字并且是0123

标签: r


【解决方案1】:

您没有正确思考“数字”是什么。编程语言存储一个内部表示,该表示保持机器极限的完全精度。您显然关心打印到屏幕或控制台的内容。根据定义,这些数字字符是字符串元素,也就是说,ASCII 解码器(或等效的)处理几个字节以确定在屏幕上绘制什么。 x“是”是什么,要愉快地引用总统证词,取决于你对“是”的定义。

【讨论】:

    【解决方案2】:

    您始终可以创建自己的对象类,其中有一个用于数字值的槽(但如果它存储为数字,那么我们看到的 123 实际上将存储为二进制值,例如 01111011(虽然可能有更多的前导 0))和另一个槽或属性,用于前导 0 的数量或有效数字的数量。然后,您可以编写方法来处理数字(以及对前导 0、sig 数字等产生什么影响)。

    然后,打印方法可以确保使用前导零打印它,同时将内部值保留为数字。

    但这在大多数情况下似乎有点过头了(尽管我知道某些字段在指示有效数字的数量方面非常重要,因此前导 0 可能很重要)。使用您已经知道的转换为字符的方法可能更简单,但只需以看起来不像数字的方式进行打印,请参阅catprint 函数的选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多