原文:C#中Math.Round()实现中国式四舍五入

  C#中的Math.Round()并不是使用的"四舍五入"法。其实在VB、VBScript、C#、J#、T-SQL中Round函数都是采用Banker's rounding(银行家算法),即:四舍六入五成双。事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法。

Math.Round(0.4)  //result:0
Math.Round(0.6)  //result:1
Math.Round(0.5)  //result:0
Math.Round(1.5)  //result:2
Math.Round(2.5)  //result:2
Math.Round(3.5)  //result:4
Math.Round(5.5)  //result:6
Math.Round(6.5)  //result:6
Math.Round(8.5)  //result:8
Math.Round(9.5)  //result:10

  .NET 2.0 开始,Math.Round 方法提供了一个枚举选项 MidpointRounding.AwayFromZero 可以用来实现传统意义上的"四舍五入"。即: Math.Round(4.5,     MidpointRounding.AwayFromZero) = 5。

  但是MidpointRounding.AwayFromZero悲剧的是,如果用这个计算小数的话,就不灵了!!!

  必须用这个重载方法,decimal Round(decimal d, int decimals, MidpointRounding mode)

  这样计算出来的小数才是真正的中国式四舍五入!

  DEMO

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace TEST
{class Program{static void Main(string[] args){double x, y,z;x= 256.585;y = 255.50;z = 126854.21;Console.WriteLine("ORI {0} OUT:{1}", x, Math.Round((decimal)x, 2, MidpointRounding.AwayFromZero)); // 256.59Console.WriteLine("ORI {0} OUT:{1} ( NO MidpointRounding.AwayFromZero PARA 【ERROR】)", x, Math.Round((decimal)x, 2)); // 256.58 【ERROR】Console.WriteLine("---------------( From 0.01 ~ 0.09)-----------------------");for (int i = 0; i < 10; i++){Console.WriteLine("ORI {0:F2} OUT:{1:F2}", y, Math.Round((decimal)y, 1, MidpointRounding.AwayFromZero));y += 0.01;}Console.WriteLine("---------------( NO MidpointRounding.AwayFromZero PARA 【ERROR】, From 0.01 ~ 0.09 )-----------------------");for (int i = 0; i < 10; i++){Console.WriteLine("ORI {0:F2} OUT:{1:f2}", y, Math.Round((decimal)y, 1));y += 0.01;}Console.WriteLine("\nORI {0} OUT:{1}", x, x.ToString("f2"));Console.WriteLine("ORI {0} OUT:{1}", x, x.ToString("#0.00"));Console.WriteLine("DECIMAL ROUND, ORI {0},OUT {1}", x, decimal.Round((decimal)x, 2, MidpointRounding.AwayFromZero));Console.WriteLine("STRING Format ORI {0},OUT {1}", x, string.Format("{0:N2}",x));}}
}

C#中的四舍五入有多坑相关推荐

  1. 小程序多个echars_微信小程序中使用echarts以及踩坑总结

    人在家中坐,锅从天上来. 半个月前本来在家写着一个项目,还没来得及提测,领导突然一个电话,需要立刻去支援另一个项目,一打听,一个烂尾半年的项目,纵使内心不愿意,还是要去啊.因为鲁迅说过,生活就像强*, ...

  2. [vue] 说说你使用vue过程中遇到的问题(坑)有哪些,你是怎么解决的?

    [vue] 说说你使用vue过程中遇到的问题(坑)有哪些,你是怎么解决的? 从详情页返回列表页时, 要保存所有状态, 比如: 滚动条位置, 数据, 下拉数据等 当时想用keep-alive, 后来没用 ...

  3. python 4舍5入_python中的四舍五入

    前言 最近工作过程中遇到了需要计算金钱的问题,由于有零有整,多次计算之后进行保留两位小数的时候,会发生计算不太准确的问题. 比如: 572.725需要保留两位小数,按照我们生活中来说,应该是572.7 ...

  4. php中浮点数四舍五入,php浮点数四舍五入函数

    本文章介绍了在php中浮点数四舍五入的两个常用的函数round与此同时ceil函数,可能小数保留位数. round() 函数对浮点数进行四舍五入 语法:float round ( float val ...

  5. Golang中WaitGroup使用的一点坑

    Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...

  6. Unity中纹理启用SRGB的坑

    Unity中纹理启用SRGB的坑 __先说结论,在shader中不使用SRGB与Linear的转换函数的前提下,如果该纹理是Albedo.Emissive.Ramp或者其它颜色贴图,建议勾上SRGB, ...

  7. C语言中关于四舍五入的计算方法

    C语言中关于四舍五入的处理 利用取整运算截断 eg: 数字0.45 取整后结果为0: 数字3.67取整后结果为3: 做整数部分的四舍五入 即:x=(int)(0.45+0.7) 取整后结果为1: #i ...

  8. Unity中实现四舍五入

    一:前言 C#中没有四舍五入,它采用的是四舍六入五成双,C#中的Math.Round和Unity中的Mathf.Round都是如此,想要实现四舍五入只能自己实现 四舍六入五成双:四舍五入时,如果小数位 ...

  9. 润乾报表通过JS自带函数来实现自动计算中的四舍五入

    一.问题描述 由于润乾设计器的单元格的"显示格式"这个属性对数据进行相应位数的舍入是根据java中的java.text.DecimalFormat这个类来实现相关的需求.所以无法实 ...

最新文章

  1. 经典题---数组改“貌”
  2. IE6 IE7 IE8(Q) 不支持 JSON 对象
  3. 虚拟存储体系由()两级存储器构成。
  4. hadoop 分片与分块,map task和reduce task的理解
  5. 后端学习 - JVM(上)内存与垃圾回收
  6. HTML Email 编写指南
  7. 【英语学习】【English L06】U04 Adventure L3 The city playground and some famous museums
  8. 【Flink】Flink 单个任务 多个流的消费同一个topic的时候其中一个流卡死 不消费
  9. 洛谷——P1548 [NOIP1997 普及组] 棋盘问题
  10. PHP Mysql-创建数据库
  11. 基于vue与element ui的vue-cron插件的使用及将定时任务cron表达式解析成中文
  12. dopod566使用小参考
  13. 2022-2028年中国光纤放大器行业市场发展潜力及投资策略研究报告
  14. 历时一年 Apache Spark 3.3.0 正式发布,新特性详解
  15. 快速记住《计算机文化基础》海量题法
  16. Java调用SharePoint WebService获取文件和文件夹
  17. Excel如何在当前行的下方插入新行?
  18. DurIAN模型介绍
  19. 冒险岛2无限服务器断开,冒险岛2无限龙无限命版
  20. Android历史版本

热门文章

  1. 字节大牛教你手撕Java学习,大厂直通车!
  2. day19【前台】支付
  3. linux 8002端口,linux – 如何限制反向SSH调整端口?
  4. mongodb集群linux日志分割,Linux下Mongodb数据库日志切割及定时删除
  5. React函数组件和类组件的区别
  6. linux中的定时器检测按键,STM32单片机利用定时器实现按键采集
  7. postgresql 集合类型_PostgreSQL 分组集合新功能(GROUPING SETS,CUBE,ROLLUP)
  8. 查询分析300万笔记录_MySQL之慢查询日志
  9. mysql查询结果作为附件_python3+mysql查询数据并通过邮件群发excel附件
  10. java字符排序_如何按字母顺序对字符串进行排序java