找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-5-26 18:15  /   查看:2267  /  回复:0
本帖最后由 Richard.Ma 于 2022-5-26 18:27 编辑

       四舍六入是小数进位的一种方法,多用于工业产品质量管理中。其舍入标准是: 四舍六入五考虑,五后非零则进一,五后皆零看奇偶,五前偶舍奇进一。即: 凡要舍去的数字的第一位数等于或小于4者,全部舍去。如5.8432,要舍去432时,取5.8。凡要舍去的数字的第一位数等于或大于6者,进1。如5.8632,要舍去632时,记为5.9。凡要舍去的数字的第一位数等于5,5后面的数字并非全为“0”,则进1。如5.8501,要舍去501时,记为5.9。如果5后面的数字都是“0”,那就要看5前面的数字是奇数还是偶数,若是偶数不进,若是奇数进1。如5.8500,记为5.8; 5.7500,记为5.8


       在Spread.NET中以及Excel中设置小数位数后,都是以四舍五入的规则进行的,某些场景下如果需要四舍六入,可以用下面的办法


1.自定义四舍六入的单元格类型,其中用了.NET提供的Math.Round()方法,本身即是四舍六入,省去我们自己写逻辑实现

  1.         private class RoundValueCellType : FarPoint.Win.Spread.CellType.GeneralCellType
  2.         {

  3.             public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  4.             {
  5.                 if (value != null&&value.GetType()==typeof(Double))
  6.                 {
  7.                     
  8.                     value = Math.Round((double)value, 2).ToString();
  9.                 }
  10.                
  11.                 base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
  12.             }
  13.         }
复制代码



2.应用到单元格中

  1. fpSpread1.ActiveSheet.Cells[3, 3].CellType = new RoundValueCellType() ;
  2. fpSpread1.ActiveSheet.Cells[3, 3].Value= 9.825;

复制代码



3最终效果,
第一行:输入值
第二行:四舍六入结果,正确进行了显示时的舍入,但不影响编辑
第三行:常规设置两位小数格式“0.00”结果,应用四舍五入
可以对比其中的差异
image.png233118590.png


0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部