接上节
这一节继续讨论银行家舍入和四舍五入
三,自己动手开发四舍五入组件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
事实上四舍五入在很多项目中还经常使用,所以我们可以动手开发一个这样的组件,以后可以在多个项目中重用。
在开发四舍五入组件之前,先要搞明白doulbe类型和decimal类型的精度问题,这也是很多学员迷糊的地方。
根据double类型和decimal类型表示的最大值和最小值的区间,我们会发现double类型的值最多能显示出15个有意义的数字(不包裹小数点),而decimal类型的值最多能显示出来29个有意义的数字(不包裹小数点),从这里也能看出为什么decimal类型又成为货币类型,因为它足够精确。如果double类型的值超过15个数字,就会截断,同样如果deciaml类型的值如果超过29个数字,就会截断。但截断的时候会四舍五入。例如:
double MyDouble1 = 123456789.34654654101104153453413212;
double MyDouble2 = 1234567890.34654654101104153453413212;
decimal MyDecimal1 = <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />123456789.34654654101104153453513212m;
decimal MyDecimal2 = 1234567890.34654654101104153453513212m;
Console.WriteLine(MyDouble1);//double输出时最多有15个数字。
Console.WriteLine(MyDouble2);//double输出时最多有15个数字。
Console.WriteLine(MyDecimal1);//decimal输出时最多有29个数字。
Console.WriteLine(MyDecimal2);//decimal输出时最多有29个数字。
Console.WriteLine();
同样采用生成格式的办法来输出double类型和deciaml类型也会截断,但是根据格式的长度,会面会自动补零。例如:
double i = -12345.67897456345;
Console.WriteLine(string.Format("{0:f" + 99 + "}", i));//大于等于100时出错 decimal j = -12345.67897456345m;
Console.WriteLine("{0:f" + 99 + "}", j);//大于等于100时出错
Console.WriteLine();
上面这个两段代码的打印结果如下图
那么为什么最长是15个数字和29个数字呢?
因为Double 值类型表示一个值介于 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字,以及 +0 或-0、PositiveInfinity、NegativeInfinity和非数字(NaN)。如果你耐住性子数数最小值和最大值的位数,你发现时15个数字。而Decimal 值类型表示从正 79,228,162,514,264,337,593,543,950,335 到负 79,228,162,514,264,337,593,543,950,335 之间的十进制数。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。同样,如果你耐住性子数数最小值和最大值的位数,你发现是29个数字。
这个组件的思想是利用Truncate方法和数学计算开发的,当然也可以利用封装Round方法开发。因为这个组件是以前我在项目中用的,所以就没采用Round方法。
源代码下载和dll下载在后面。这个组件可以对单个double和decimal进行四舍五入,也可以同时对N个double和decimal进行四舍五入,保留小数点后面多少位没有限制,但是必须要明白,double不能超过15个数字和decimal不能超过29数字的本质。类关系图如下图
最后PS:目前银行家算法已经写入小学的教科书,不懂的可以向小学生请教!呵呵

银行家舍入VS四舍五入(下):.NET发现之旅(四)相关推荐

  1. 用计算机四舍五入偷银行储户的钱,银行家舍入VS四舍五入(下):.NET发现之旅(四)...

    昨天和IBM以前培训的一个学员聊天,他问我.NET Framework提供四舍五***的方法了吗?我当时解释了老半天,索性就直接写一篇博文吧,以后学生问起,直接发文章看. ×××运算中的四舍五***法 ...

  2. 四舍五入VS银行家舍入 (四舍六入五取偶)

    相信细心的程序员们早就发现了.net环境下默认舍入算法的是"四舍六入"的算法.从小学我们就学过"四舍五入"算法,但是更加科学的舍入办法应该是"四舍六入 ...

  3. 四舍五入VS银行家舍入

    相信细心的程序员们早就发现了.net环境下默认舍入算法的是"四舍六入"的算法.从小学我们就学过"四舍五入"算法,但是更加科学的舍入办法应该是"四舍六入 ...

  4. Excel-VBA:“银行家舍入” 与“国际标准的四舍五入”

    Excel-VBA:"银行家舍入" 与"国际标准的四舍五入" 银行家舍入 国际标准的四舍五入 Excel里的 Round函数 银行家舍入 银行家舍入法就是大家所 ...

  5. 四舍五入和银行家舍入法

    四舍五入是一种应用非常广泛的近似计算方法,其有算术舍入法和银行家舍入法两种. 所谓算术舍入法,就是我们通常意义上的四舍五入法.其规则是:当舍去位的数值大于等于5时,在舍去该位的同时向前位进一:当舍去位 ...

  6. MySql数据类型分析(银行家舍入法) Part3

    四舍五入和银行家舍入法 一.四舍五入是一种应用非常广泛的近似计算方法,其有算术舍入法和银行家舍入法两种. 所谓算术舍入法,就是我们通常意义上的四舍五入法.其规则是:当舍去位的数值大于等于5时,在舍去该 ...

  7. 银行家舍入-四舍六入五成双

    在js的计算中: 一个例子,比如说一件商品,它的含税单价是450,税率是3%,那么我们将它转为不含税单价.450/1.03=436.8932038834951 结果是17位,共13位小数.当然实际上, ...

  8. 银行家舍入法(四舍六入)

    文章目录 银行家舍入法: 银行家舍入法: 生活中常见的计算方法就是四舍五入,但是银行家舍入法是四舍六入.五后面有非0的数字将直接向前进位,没有数字的情况下还要看前一位是偶数还是奇数.偶数舍去,奇数进位 ...

  9. 为什么银行家舍入是合理的?

    我们知道银行的盈利渠道主要是利息差,从储户手里收拢资金,然后放贷出去,其间的利息差额便是所获得的利润.对一个银行来说,对付给储户的利息的计算非常频繁. 场景介绍完毕,我们回过头来看四舍五入,小于5的数 ...

最新文章

  1. 奇葩面试官让我回去等通知!看我怎么虐他!
  2. python批量雷达图_python批量制作雷达图
  3. 2021高校毕业生薪酬Top100出炉!
  4. 百度启动史上规模最大校园招聘;荣耀Magic3系列售价4599元起;阿里成立反职场陋习小组,无条件支持员工拒绝劝酒|极客头条...
  5. java队列 双队列_Java队列– Java队列
  6. obj 格式3D模型转 gltf 格式
  7. GSM、PLMN区、msc区、位置区、基站区、小区、TAC、CI 名词解析
  8. 从零开始学android:环境搭建
  9. 字节内推 面试进度可查询 拒绝石沉大海 !!!
  10. 张凯龙 西北工业大学计算机学院,张凯龙的个人主页-西北工业大学教师个人主页...
  11. CSS:div中文字换行设置
  12. java计算机毕业设计基于Ssm学生信息管理系统源程序+mysql+系统+lw文档+远程调试
  13. FCKeditor的配置,上传文件的文件名乱码和目录的设定,加入兔斯基表情
  14. 【SOP 】配电网故障重构方法研究【IEEE33节点】(Matlab代码实现)
  15. 电子邮件帐户受损报告,请查收!
  16. 单调栈图文详解(附Java模板)
  17. 佳能激光打印机设置无线网络
  18. 最新的iPhone 各种机型尺寸信息列表(含iPhone 7/8、iPhoneX、iPhone XR、iPhone XS Max)
  19. mysql eav_mysql – 数据库设计:EAV选项?
  20. Vulkan填坑学习Day18—顶点输入描述

热门文章

  1. CSS3的calc()使用
  2. 使用Puppeteer进行数据抓取(一)——安装和使用
  3. 无刷新上传Excel后利用JQuery AJAX 显示进度条的实现方式
  4. vue3.0 AntDesignVue2.0 table的rowkey报错问题解决方法
  5. Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶第一篇
  6. spring webscoket服务端使用记录
  7. 让数字保持在整数范围内
  8. RabbitMQ for windows
  9. MyBatis 事务源码分析
  10. 安装Wamp后 Apache无法启动的解决方法