我们需要按照以下规则进行两次舍入:
如果第三个数字在0到4之间-> +0
如果第三个数字在5到9之间-> +1
我已经尝试了以下内容,但不是我们所需要的
Module VBModule
Sub Main()
Console.WriteLine("142.5700 --> " & Math.Round(142.5700,2,MidpointRounding.ToEven))
Console.WriteLine("142.5710 --> " & Math.Round(142.5710,2,MidpointRounding.ToEven))
Console.WriteLine("142.5720 --> " & Math.Round(142.5720,2,MidpointRounding.ToEven))
Console.WriteLine("142.5730 --> " & Math.Round(142.5730,2,MidpointRounding.ToEven))
Console.WriteLine("142.5740 --> " & Math.Round(142.5740,2,MidpointRounding.ToEven))
Console.WriteLine("142.5750 --> " & Math.Round(142.5750,2,MidpointRounding.ToEven))
Console.WriteLine("142.5760 --> " & Math.Round(142.5760,2,MidpointRounding.ToEven))
Console.WriteLine("142.5770 --> " & Math.Round(142.5770,2,MidpointRounding.ToEven))
Console.WriteLine("142.5780 --> " & Math.Round(142.5780,2,MidpointRounding.ToEven))
Console.WriteLine("142.5790 --> " & Math.Round(142.5790,2,MidpointRounding.ToEven))
End Sub
End Module
142.5700 --> 142.57
142.5710 --> 142.57
142.5720 --> 142.57
142.5730 --> 142.57
142.5740 --> 142.57
142.5750 --> 142.57 this is wrong we need to have 142.58
142.5760 --> 142.58
142.5770 --> 142.58
142.5780 --> 142.58
142.5790 --> 142.58
我尝试修复下面的代码...但是我仍然无法获得正确的输出
'''公共函数calculateTax(gameId作为字符串,乘数作为字符串,CSWinning作为字符串)作为字符串CSWinning = CSWinning.Replace(“。”,“,”)Dim赢得小数= 0 Dim firstTax As Decimal = CDec(0.15)昏暗secondTax作为小数= CDec(0.2)
If String.IsNullOrEmpty(multiplier) OrElse multiplier.Equals("0") Then
multiplier = "1"
End If
Dim winningsMinuscolumns As String = ((CDec(CSWinning) - getColumnCostByGame(gameId)) *CDec(multiplier.Replace("[","").Replace("]",""))).ToString
'Check initially if winning sum is smaller than 100
If CDec(winningsMinuscolumns) <= CDec(100) Then
wins = CDec(CSWinning)
'Check initially if winning sum is smaller than 500
Else If CDec(winningsMinuscolumns) <= CDec(500)
Dim taxedSum As Decimal = CDec(winningsMinuscolumns) - CDec(100)
wins = CDec(CDec(CSWinning) - 100) - CDec(taxedSum * firstTax)
wins = wins + CDec(100)
'Check initially if winning sum is larger than 500
Else
Dim taxedSum As Decimal = CDec(winningsMinuscolumns) - CDec(500)
wins = CDec(CDec(CSWinning) - 500) - CDec(taxedSum * secondTax)
wins = (CDec(400) - (CDec(400) * firstTax)) + wins
wins = wins + CDec(100)
End If
Report.Info("BeforeRound " & (wins))
Report.Info("AfterRound " & roundEven(wins))
Return (roundEven(wins) * CDec(multiplier.Replace("[","").Replace("]",""))).ToString
End Function
Public Function roundEven(num As Decimal) As Double
Report.Info("Inside " & num)
Report.Info("Inside cdbl " & CDbl(num))
Return Math.Round(CDbl(num),2,MidpointRounding.ToEven)
End Function
'''00:14.902信息用户BeforeRound 142,5750
00:14.932信息用户内部142,5750
00:14.961信息用户内部cdbl 142,575
00:14.994信息用户AfterRound 142,57
'''
这段代码使用浮点数,这意味着142.575
不是完全142.575
由于缩放错误。如果您尝试使用超过13个小数位的数字打印数字,例如:
Console.WriteLine("{0:N14}",142.575)
你会得到
142.57499999999999
但是,如果使用十进制文字,则会得到预期的结果。以下行:
Console.WriteLine("{0:N24}",142.575D)
产生
142.575000000000000000000000
和
Math.Round(142.575D,2,MidpointRounding.ToEven)
产生
142.58
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句