Richard.Ma 发表于 2022-5-26 18:15:37

Spread.NET实现“四舍六入五成双”显示两位小数

本帖最后由 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()方法,本身即是四舍六入,省去我们自己写逻辑实现

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

            public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
            {
                if (value != null&&value.GetType()==typeof(Double))
                {
                  
                  value = Math.Round((double)value, 2).ToString();
                }
               
                base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
            }
      }


2.应用到单元格中

fpSpread1.ActiveSheet.Cells.CellType = new RoundValueCellType() ;
fpSpread1.ActiveSheet.Cells.Value= 9.825;




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



页: [1]
查看完整版本: Spread.NET实现“四舍六入五成双”显示两位小数