用零填充数字

时间:2015-08-21 11:35:18

标签: ruby string

如何将数字00表示为字符串:

    如果user.id在0到9范围内,则
  • # => "00#{user.id}"填充到左侧

    0

  • 如果user.id的范围是10到99

    ,则
  • # => "0#{user.id}"填充

    # => "#{user.id}"

  • 否则没有填充

    user.id = 1

例如,拥有"001",产生user.id = 11,产生"011",产生user.id = 111,产生"111",产生DECLARE @DB_NAME VARCHAR(50) SET @DB_NAME='CC_GET' DECLARE @CMD_BUSID VARCHAR(300) SET @CMD_BUSID='(SELECT DISTINCT A.BUSID FROM LTBAUDITTYPE A WHERE BUSINESS IN ( SELECT DISTINCT CONTACT_BUSINESS FROM '+@DB_NAME+'.DBO.LTBCONTACT))' --DECLARE @BUS_ID TABLE(BUS INT) --INSERT INTO @BUS_ID --DROP TABLE #BUS_ID CREATE TABLE #BUS_ID( BUS INT) INSERT INTO #BUS_ID EXEC(@CMD_BUSID) --SELECT * FROM #BUS_ID DECLARE @CMD_BUSNAME VARCHAR(300) SET @CMD_BUSNAME='(SELECT DISTINCT A.BUSINESS FROM LTBAUDITTYPE A WHERE BUSINESS IN ( SELECT DISTINCT CONTACT_BUSINESS FROM '+@DB_NAME+'.DBO.LTBCONTACT))' --DECLARE @BUS_NAME TABLE(BUS1 NVARCHAR(50)) --INSERT INTO @BUS_NAME --DROP TABLE #BUS_NAME CREATE TABLE #BUS_NAME(BUS1 VARCHAR(50)) INSERT INTO #BUS_NAME EXEC(@CMD_BUSNAME) --SELECT * FROM #BUS_NAME declare @cmd_ltbEnvPriority varchar(500) set @cmd_ltbEnvPriority='insert into #Track_info(BusID,BusName,CC_DBName,Table_Name,[ID missed in GEEHS]) ( select (select bus from #BUS_ID ) BusID,(select bus1 from #BUS_NAME) BusName, @db_name CC_DBName,''ltbEnvPriority'' Table_Name,a.words [ID missed in GEEHS] from '+@DB_NAME+'.dbo.ltbEnvPriority a where not exists (select 1 from ltbEnvPriority b where a.words=b.words))' --print @cmd_ltbEnvPriority EXEC (@cmd_ltbEnvPriority) {1}}。

5 个答案:

答案 0 :(得分:33)

puts 1.to_s.rjust(3, "0")
#=> 001
puts 10.to_s.rjust(3, "0")
#=> 010
puts 100.to_s.rjust(3, "0")
#=> 100

上面的代码会将你的user.id转换为字符串,然后String.rjust()方法会考虑它的长度和前缀适当的零数。

答案 1 :(得分:21)

您最好使用字符串格式。

"%03d" % 1    #=> "001"
"%03d" % 10   #=> "010"
"%03d" % 100  #=> "100"
"%03d" % user.id # => what you want

答案 2 :(得分:1)

您可以尝试使用字符串"'%03d' % #{user.id}"

答案 3 :(得分:1)

String#rjust

user.id
#⇒ 5
user.id.to_s.rjust(3, '0')
#⇒ "005"

答案 4 :(得分:1)

也可以使用

Kernel#formatKernel#sprintf

format('%03d', user.id)

# or

sprintf('%03d', user.id)

作为旁注,由于 Kernel#format 运算符的歧义(例如在代码没有明确说明这是整数模还是字符串格式)。此外,Kernel#sprintf 将数组作为参数,这可能涉及分配一个新对象,这可能会带来(可能微不足道,但存在)性能损失。