货币变化 VBA

Money change VBA

我做了一个小代码改钱,但是我有一个小问题

代码是这样的

Dim moneyHelper As Double
moneyHelper = 1.9

While moneyHelper > 0
  If moneyHelper > 25 Then
  Else If moneyHelper > 10 Then
  Else If moneyHelper > 5 Then
  Else If moneyHelper > 1 Then
    console.WriteLine("change  x " + Math.Floor(moneyHelper/1).ToString)
    moneyHelper = moneyHelper - (Math.Floor(moneyHelper/1)*1)
    console.WriteLine("result after : " + moneyHelper.ToString)
  Else If moneyHelper > 0.5 Then
    console.WriteLine("change [=11=].5 x " +  Math.Floor(moneyHelper/0.5).ToString)
    moneyHelper = moneyHelper - ( Math.Floor(moneyHelper/0.5)*0.5)
    console.WriteLine("result after [=11=].5: " + moneyHelper.ToString)
  Else If moneyHelper > 0.1 Then
    console.WriteLine("change [=11=].1 x " +  Math.Floor(moneyHelper/0.1).ToString)
    moneyHelper = moneyHelper - ( Math.Floor(moneyHelper/0.1)*0.1)
    console.WriteLine("result after [=11=].1: " + moneyHelper.ToString)
  End If
End While

但是结果是这样的

change  x 1
result after : 0.9
change [=12=].5 x 1
result after [=12=].5: 0.4
change [=12=].1 x 3
result after [=12=].1: 0.0999999999999999

更改后,结果应为 0,更改 $0.1x4,但结果为 0.0999999999999999,更改 $0.1x3。不知道为什么。

非常感谢你们的帮助!谢谢

试试这个:

    Dim moneyHelper As Decimal = 1.9D
    While moneyHelper > 0
        Select Case moneyHelper
            Case > 25D
               '?
            Case > 5D
               '?
            Case > 1D
                Console.WriteLine($"change  x {Math.Floor(moneyHelper / 1)}")
                moneyHelper -= CDec(Math.Floor(moneyHelper / 1) * 1)
                Console.WriteLine($"result after : {moneyHelper}")
            Case > 0.5D
                Console.WriteLine($"change [=10=].5 x {Math.Floor(moneyHelper / 0.5)}")
                moneyHelper -= CDec(Math.Floor(moneyHelper / 0.5) * 0.5)
                Console.WriteLine($"result after [=10=].5: {moneyHelper}")
            Case > 0.1D
                Console.WriteLine($"change [=10=].1 x {Math.Floor(moneyHelper / 0.1)}")
                moneyHelper -= CDec(Math.Floor(moneyHelper / 0.1) * 0.1)
                Console.WriteLine($"result after [=10=].1: {moneyHelper}")
            'Case Default?
               '?
        End Select
    End While

您可以通过用参数化函数替换重复代码来收紧它,但这不是您的问题。此外,代码不处理 moneyHelper 的所有值,例如值 <= 0.10 - 请参阅 Case Default.