プロセスを自動化するより「高度な」方法は次のとおりです。
Private Function CalculateChange(ByVal dAmount As Decimal) As Decimal()
Dim arrNotesAvailable() As Decimal = {200D, 100D, 50D, 20D, 10D, 5D, 2D, 1D, 0.5D, 0.2D, 0.1D, 0.05D, 0.02D, 0.01D}
Dim arrChangeAmounts(arrNotesAvailable.Length - 1) As Decimal
For iIndex As Integer = 0 To arrNotesAvailable.Length - 1
arrChangeAmounts(iIndex) = dAmount \ arrNotesAvailable(iIndex)
dAmount = dAmount Mod arrNotesAvailable(iIndex)
Next
Return arrChangeAmounts
End Function
これにより、発行される各ユニットの正確な金額で満たされた配列が自動的に返されます。
さらに高度なソリューション:
Private Function CalculateChange(ByVal dAmount As Decimal) As Decimal()
Dim arrNotesAvailable() As Decimal = {200D, 100D, 50D, 20D, 10D, 5D, 2D, 1D, 0.5D, 0.2D, 0.1D, 0.05D}
Dim arrChangeAmounts(arrNotesAvailable.Length - 1) As Decimal
For iIndex As Integer = 0 To arrNotesAvailable.Length - 2
arrChangeAmounts(iIndex) = (dAmount * 100) \ (arrNotesAvailable(iIndex) * 100)
dAmount = dAmount Mod arrNotesAvailable(iIndex)
Next
arrChangeAmounts(arrNotesAvailable.Length - 1) = Math.Ceiling((dAmount * 100) / (arrNotesAvailable(arrNotesAvailable.Length - 1) * 100))
Return arrChangeAmounts
End Function
これは、最後から 2 番目に指定された単位に必要な紙幣と硬貨の量を分解し、残りを通貨の最小単位で「埋めます」。1(1セントまたは1円)までの単位で取引されていない国。私たちの国では、5 セントまで取引します。