[英]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
的。009 + 1 = 010
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-009
到INV-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.