关于将现金金额分成各种账单和硬币的实际数量的建议和反馈

时间:2013-09-12 01:54:06

标签: vba

所以我需要知道如何将一定数量的钱分成各种账单和硬币的实际数量。我知道这很令人困惑,所以让我举一个例子:

$16.32 - Sixteen dollars and thirty-two cents
One $10 bill
One $5 bill
One $1 bill
One Quarter ($0.25)
One Nickel ($0.05)
Two Pennies ($0.01)

正如你所看到的,我们只是得到一个价值的账单和硬币的数量,这将根据用户输入而改变。

这是我当前的设置(Visual Basic):

If 100 Mod amount < 0 Then
    If 50 Mod amount < 0 Then
         ' Continue this pattern until you get all the way down to the end ($0.01)
    Else  
        While amount > 50
            fiftiesAmount += 1
            amount -= 50
    End If
Else 
    While amount > 100 
        hundredsAmount += 1
        amount -= 100
End If

基本上,每个If语句都会确定您的总金额是否需要该类型的额外结算金额,然后再添加已创建的帐单/硬币金额或转移到下一金额。

这是一种有效的做事方式,还是我错过了一个更容易/更快的算法/模式,这将使我的生活,以及谁在阅读我的代码的生活更轻松? 如果您需要额外的详细信息,我将很乐意根据需要编辑问题。

1 个答案:

答案 0 :(得分:2)

将您的金额转换为美分(这更容易)。除以正在测试的货币值,然后从余额中扣除该金额(伪代码)

Value = 16.32 * 100                  ' Convert to cents
If Value > 10000                     ' Hundreds
  Hundreds = Value / 10000           ' How many?
  Value = Value - (Hundreds * 10000) ' Reduce amount accordingly
End If

If Value > 5000                      ' Fifties
  Fifties = Value / 5000
  Value = Value - (Fifties * 5000)   
End If

If Value > 2000                      ' Twenties
  Twenties = Value / 2000
  Value = Value - (Twenties * 2000)
End If

重复直到你的数量少于100,此时你开始使用硬币(50,25,10,5) 一旦你得到&gt; 10,你达到了便士;保存它们,减少该数量的价值,以及 值为零,所以你已经完成了。