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]