加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用Math.Round进行舍入问题

发布时间:2020-12-16 00:21:11 所属栏目:百科 来源:网络整理
导读:Module Module1Public Sub Main() Dim values() As Double = {43.523,12.65,43.565} For Each value As Double In values Console.WriteLine("{0} -- {1}",value,Math.Round(value,2)) Next Console.ReadLine()End SubEnd Module 上面的代码结果为 43.523 –
Module Module1
Public Sub Main()
    Dim values() As Double = {43.523,12.65,43.565}
    For Each value As Double In values
        Console.WriteLine("{0} --> {1}",value,Math.Round(value,2))
    Next
    Console.ReadLine()
End Sub
End Module

上面的代码结果为

> 43.523 – > 43.52
> 12.65 – > 12.65
> 43.565 – > 43.56

我需要43.565 – > 43.57而不是43.565 – > 43.56.
但我仍然需要其他43.523 – > 43.52和12.65 – > 12.65按原样舍入.

解决方法

首先,如果您关注精确的十进制值,则应考虑使用Decimal而不是Double.特别是,43.565并不能完全代表Double的开头.

但是,如果要指定“中点”的行为(即可以合理地向上或向下舍入的位置),请使用overload with a MidpointRounding parameter:

Console.WriteLine("{0} --> {1}",_
                  Math.Round(value,2,MidpointRounding.AwayFromZero))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读