VB.NET从0舍入到4-> 0从5舍入到9-> 1

卢卡·鲁杰里(Luca Ruggeri)

我们需要按照以下规则进行两次舍入:

如果第三个数字在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

LUA舍入到1

来自分类Dev

VB.Net Math.Round为什么将5舍入到最接近的偶数,我该怎么办?

来自分类Dev

从字符串“ 0-1”到类型“ Double”的转换无效:VB.net

来自分类Dev

VB.net 舍入问题

来自分类Dev

(vb.net)舍入到小数点后2位

来自分类Dev

在 php 中将 1.5 的值舍入到 1?

来自分类Dev

VB中的舍入数

来自分类Dev

BigDecimal舍入为0或5

来自分类Dev

将浮点数舍入为 -1、0 或 1

来自分类Dev

如何随机选择0或1 vb.net

来自分类Dev

sql 过程返回 1 但 vb.net 得到 0

来自分类Dev

快速将数字> = 0舍入到2的特定幂的倍数

来自分类Dev

SQL:舍入到小数点后1位

来自分类Dev

清除算法以生成类型为(0)到(0,1,2,3,4,5,6,7,8,9)的所有集合

来自分类Dev

向上舍入到10 vb的下一个倍数

来自分类Dev

如果前后1分钟或2分钟,如何舍入到最接近的5分钟间隔?

来自分类Dev

JavaScript舍入到最接近的.5

来自分类Dev

bash舍入到最接近的4的倍数

来自分类Dev

(-1)^k 对于 R 中从 0 到 9 的每个 k

来自分类Dev

VB到C#如果参数和1如何转换

来自分类Dev

VB.NET:将string1 valeur从资源复制到剪贴板

来自分类Dev

vb.net 函数 File.txt 以 az 0-1 顺序保存

来自分类Dev

将数字向上舍入到laravel中最接近的9

来自分类Dev

将双精度舍入到小数点后两位,显示“#.00”而不是“#.0”

来自分类Dev

下拉值发送“ 0”而不是值到VB.net的消息框中

来自分类Dev

使用4/5舍入规则舍入数字

来自分类Dev

在C#中舍入到小数点后1位

来自分类Dev

SQL舍入,当在.5上时,舍入到更大的数字,即1.235结果1.24

来自分类Dev

委托从VB6到vb.net的错误转换