繁体   English   中英

如何在保持适当的尾随/前导零的同时增加字符串中的数字

[英]How to increment the number in a string while keeping the appropriate trailing/leading zeros

我很好奇会计软件如何使“发票编号”递增,即从 INV-001 递增到 INV-002。 让我们只关注“001”来剖析。

我做了一些“谷歌搜索”,发现了"%03d"的用法:

puts "%03d" % 1
#=> "001"

这是一个开始,但我与许多变化作斗争:

str = "001"
str = "009"

在学校,我们被教导:

# Let's assume we knew nothing about strings
001 + 1 # gives us 002. How?

# This is what really happens
#
#  001
# +  1
# ______
#  002

使用上面的方法,如果我们“添加”009 + 1,如果我们使用上面的方法,我们会得到010

编程的情况有很大不同,因为将 "001" 转换为 integer 变为1

如何创建一个知道如何添加"001"1返回"002"的方法?

我假设上面的公式发生了很多事情:

  1. 它是如何知道要加1的。
  2. 它如何知道将“剩余”带到左侧然后添加即009 + 1 = 010
  3. 对于 3,它如何知道在010而不是10的末尾保持零

我尝试了很多东西,但都是不正确的。 基本上我需要增加字符串:

# Result should be when str is incremented by 1
str = "002" + 1 #=> "003"
str = "0002" + 1 #=> "0003"
str = "009" + 1 #=> "010"
str = "0002" + 1 #=> "0010"
str = "02" + 1 #=> "03"
str = "1" + 1 #=> "2"

str转换为 float 会丢失零,我似乎无法使用"%03d"成功使用任何逻辑。

我很好奇会计软件如何使“发票编号”递增,即从 INV-001 递增到 INV-002。

会计软件通常不会对先前生成的字符串进行操作。 相反,它只是将发票编号(即数字部分)存储为普通的 integer,例如:

invoice_number = 9

然后它根据一个小模板格式化该数字,例如

format('INV-%03d', invoice_number)
#=> "INV-009"

现在,从INV-009INV-010只需递增 integer 并通过格式化程序运行它:

invoice_number += 1
#=> 10

format('INV-%03d', invoice_number)
#=> "INV-010"

你可以像这样使用next

("%03d" % 1).next #=> '002'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM