会計ソフトウェアがどのようにして「請求書番号」の増加、つまり 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」を返すメソッドを作成するにはどうすればよいですか?
上記の式では多くのことが起こっていると思います。
たくさんのことを試しましたが、すべて間違っています。基本的に文字列をインクリメントする必要があります。
# 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」ではどのロジックも正常に使用できないようです。
通常、会計ソフトウェアは、以前に生成された文字列では動作しません。代わりに、請求書番号 (数値部分) を通常の整数として保存します。例:
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"