今天在某.NET Core 群中看到有人在问Math.Round的问题。其实这个问题之前有很多人遇到了,在此总结一下。

开发者为了实现小数点后 2 位的四舍五入,编写了如下代码,

var num = Math.Round(12.125, 2);

代码非常的简单,开发者实际得到的结果是 12.12, 这与其所预期的四舍五入结果 12.13 相悖。

其实产生这个结果的原因是由于Math.Round 默认使用的并非是四舍五入的原则,而是四舍六入五成双的原则。

四舍六入五成双

所谓的四舍六入五成双,就是说当确定有效位数之后,有效位数的下一位如果小于等于 4 就舍去,如果大于等于 6 就进一,当有效位数的下一位是 5 的时候

  • 如果 5 前面为奇数,就舍五进一

  • 如果 5 前面为偶数,就舍五不进(0 是偶数)

从统计学上讲,四舍六入五成双比四舍五入要更精确,因为大量计算的情况下,四舍五入逢五进一,会导致结果偏向大数。

例如:

1.15+1.25+1.35+1.45 = 5.2

如果有效位数是小数点后一位,使用四舍五入原则得到的结果

1.2 + 1.3 + 1.4 + 1.5 = 5.4

而使用四舍六入五成双原则得到的结果是

1.2 + 1.2 + 1.4 + 1.4 = 5.2

由此可见四舍六入五成双原则得到的结果更为精确。

Math.Round 的四舍五入

那么如何使用Math.Round实现预期的四舍五入呢?

其实 C#中的Math.Round提供了非常多的重载方法,其中有两个重载方法是,

public static double Round (double value,int digits,MidpointRounding mode);
public static decimal Round (decimal d,int decimals,MidpointRounding mode);

这两个方法都提供了第三个参数mode, mode是一个MidpointRounding的枚举变量,它有 2 个可选值

  • AwayFromZero - 四舍五入

  • ToEven - 四舍六入五成双

所以如果我们希望得到一个理想中四舍五入的结果,我们可以改用如下代码:

var num = Math.Round(12.125, 2,MidpointRounding.AwayFromZero);

[小技巧]你真的了解C#中的Math.Round么?相关推荐

  1. python中读取txt文件、统计其中所有字母出现的频度_Python编程小技巧:如何统计序列中元素的出现频度...

    原标题:Python编程小技巧:如何统计序列中元素的出现频度 实际案例 某随机序列中,找到出现次数最高的三个元素,他们的出现次数是多少? 对某英文文章的单词进行词频统计,找到出现次数最高的10个单词, ...

  2. 我的世界服务器展示自定义图片,我的世界装逼小技巧 怎么在自制地图中显示自己的头像...

    我的世界装逼小技巧 怎么在自制地图中显示自己的头像.那下面给大家分享的是我的世界玩家教你怎么在你的地图中显示的是你的头像,希望大家喜欢. 游戏园我的世界官方群:325049520或256070479欢 ...

  3. Python数据分析小技巧:如何在Pandas中实现数据透视表?

    Python数据分析小技巧:如何在Pandas中实现数据透视表? 数据透视表是数据分析中非常有用的工具,可以帮助我们快速了解数据的结构.关联和趋势.在Pandas中,我们可以使用pivot_table ...

  4. mmdetection小技巧(强烈推荐 逐步完善中)

    小技巧一:在mmdetection中所有的配置文件,都有这样一行代码,如果要做目标检测,则引用coco_detection.py,如果要做目标检测,则引用coco_instance.py.在训练Swi ...

  5. 5 在java等于多少,java基础面试题之Java中的Math. round(-1. 5)等于多少

    Java 中的 Math. round(-1. 5) 等于多少? 答案:-1 /** * Returns the closest {@code long} to the argument, with ...

  6. java 中的 Math.round(-1.5) 等于多少?

    面试题汇总 java 中的 Math.round(-1.5) 等于多少? 这道题目的答案是 -1. 其实这道题目考察的主要知识点就是:Math.round方法的概念以及返回值类型. 注意:Math的r ...

  7. PS软件基础学习,抠图小技巧,轻松完成设计中最基础的一步。

    PS是设计的基础工具,而抠图则是平面设计中最基础的技巧,很多初学者觉得抠图很麻烦,很多小细节的地方也容易处理不好,今天给大家分享一下几个基本的抠图小技巧. 一.魔棒工具 用魔棒工具抠图是最简单直接的抠 ...

  8. 【HTML5游戏开发小技巧】RPG情景对话中,令文本逐字输出

    以前用javascript实现过令文本逐字输出的效果,今天我来用html5中的canvas实现一下.canvas里的内容可不像<p>那样好操作,首先,你需要懂得一些html5的API才能操 ...

  9. SAP小技巧之 实现SMARTFORM打印中的小计与总计

    点击蓝字 关注我们 一 前言 公众号群里面有人在讨论SMARTFORM打印中的小计和总计的实现.好久没有做SMARTFORM了, 所以没有参与讨论. 后来网上查询了一下. 也没有找到很好的解决方案.所 ...

最新文章

  1. Centos6.0 64位MySQL 5.5.20 CMake 安装部署
  2. 理解统计信息(6/6):统计信息汇总贴
  3. 多个硬件体验如一,华为终端分布式技术会重构IoT生态吗?
  4. 奈奎斯特采样定理_通俗理解奈奎斯特带宽
  5. Android开发之EditText输入显示文字hint大小设置
  6. 2017.3.1 xiaoyimi测试
  7. Reactive Extensions入门(4):Rx实战
  8. python实现多智能体一致性_多智能体深度学习算法MADDPG的PARL实践
  9. android中得到屏幕的高宽(像素)
  10. mysql数据库回滚日志_Mysql数据库慢查询日志的使用
  11. tkinter 中给某个文本加上滚动条_python中wx模块的具体使用方法
  12. 分布式架构在云计算平台中的应用及优缺点
  13. 麟龙指标通达信指标公式源码_麟龙指标套三 麟龙特色指标 通达信主图+副图指标 贴图...
  14. 移动安全-安卓Smail代码入门讲解
  15. 计算机操作系统学习笔记
  16. 人货匹配模型没搞懂?互联网行业都在讨论它
  17. Sharepoint visio Web Access
  18. 微信朋友圈投票刷票脚本实现分析
  19. android德地图点聚合,点聚合-点标记-示例中心-JS API 示例 | 高德地图API
  20. source insight 仿 vscode 主题 (GitHub免积分下载)

热门文章

  1. Lua 学习笔记(一)
  2. DbVisualizer 8 解决中文乱码问题
  3. 十个必备的.NET开发小工具(1):Snippet Compiler
  4. pta7-7旅游规划(dijkstra算法)
  5. 纯css实现漂亮又健壮的tooltip
  6. 使用putty连接linux
  7. spring boot aop 记录方法执行时间
  8. docker Failed to get D-Bus connection 报错
  9. 深入浅出Docker(三):Docker开源之路
  10. 图像处理技术(三)白平衡