我很好奇会计软件如何实现“发票编号”递增,即从 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”转换为整数变得
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
转换为浮点会丢失零,我似乎无法成功地使用 "%03d"
来使用任何逻辑。
我很好奇会计软件如何实现“发票编号”递增,即从 INV-001 递增到 INV-002。
会计软件通常不会对之前生成的字符串进行操作。相反,它只是将发票号码(即数字部分)存储为普通整数,例如:
invoice_number = 9
然后根据小模板格式化该数字,例如
format('INV-%03d', invoice_number)
#=> "INV-009"
现在,从
INV-009
到 INV-010
只需递增整数并通过格式化程序运行它即可:
invoice_number += 1
#=> 10
format('INV-%03d', invoice_number)
#=> "INV-010"
您可以像这样使用
next
:
("%03d" % 1).next #=> '002'