货币变化 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
.
我做了一个小代码改钱,但是我有一个小问题
代码是这样的
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
.