找回密码
 立即注册

QQ登录

只需一步,快速开始

dlerror
中级会员   /  发表于:2022-5-26 11:40  /   查看:2897  /  回复:7
本帖最后由 dlerror 于 2022-5-26 13:27 编辑

单元格类型设置为Number,小数位数3位。
当在后台向单元格赋值时,如果值的小数位数大于3位时,单元格表示的内容被四舍五入了,赋值后,从该单元格取出的值,是赋给单元格的值。
现在需要单元格表示的内容是四舍六入的。
例如,现在使用SetValue赋值1.0005,单元格显示的是1.001,使用GetValue取出的值是1.0005,
我需要的是,使用SetValue赋值1.0005,单元格显示1.000,从单元格取出的是1.0005。
麻烦版主帮忙看一下,如何实现,谢谢了。

7 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-5-26 14:54:21
沙发
你是要实现“四舍六入五成双”吧,这个目前只能通过自定义公式来实现,

我们的另一个产品SpreadJS提供了一个类似自定义公式的实现,你可以参考作为思路,通过SPREAD.NET的自定义公式功能来自己实现一个自定义公式

spreadjs实现“四舍六入五成双”
https://gcdn.grapecity.com.cn/showtopic-141668-1-1.html

SPREAD.NET自定义公式的教程
https://www.grapecity.com/spread ... mulacustomfunc.html

回复 使用道具 举报
dlerror
中级会员   /  发表于:2022-5-26 16:05:10
板凳
Richard.Ma 发表于 2022-5-26 14:54
你是要实现“四舍六入五成双”吧,这个目前只能通过自定义公式来实现,

我们的另一个产品SpreadJS提供了 ...

使用自定义公式,直接修改了单元格的值?
这样处理后,我再从单元格取值,取的是自定义公式处理后的值,还是处理前的值?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-5-26 18:06:45
地板
如果只是要显示效果的话,可以通过自定义单元格类型来实现(替代单元格格式设置)

自定义单元格类型
  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.         }
复制代码



使用自定义的单元格
  1. fpSpread1.ActiveSheet.Cells[3, 3].CellType = new RoundValueCellType() ;
  2. fpSpread1.ActiveSheet.Cells[3, 3].Value= 9.825;

复制代码


回复 使用道具 举报
dlerror
中级会员   /  发表于:2022-5-26 22:23:32
5#
Richard.Ma 发表于 2022-5-26 18:06
如果只是要显示效果的话,可以通过自定义单元格类型来实现(替代单元格格式设置)

自定义单元格类型

这个方法可行,谢谢版主。

还有一个问题,SpreadFormV1.0中,单元格赋值大于规定小数位数时的舍入规则是什么?
我们测试发现既不是“四舍五入”,也不是“四舍六入五成双”,
在SpreadFormV11.0中,无法复刻SpreadFormV1.0相同的处理,
麻烦版主帮忙找一下资料,谢谢了。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-5-27 09:24:51
6#
最早的文档也只能到11,之前的文档目前已经没有了,没办法帮到你
https://www.grapecity.com/spreadnet/docs/


目前,spread.NET的格式设置中小数位数的舍入规则和excel是保持一致的
回复 使用道具 举报
dlerror
中级会员   /  发表于:2022-5-27 09:36:14
7#
Richard.Ma 发表于 2022-5-27 09:24
最早的文档也只能到11,之前的文档目前已经没有了,没办法帮到你
https://www.grapecity.com/spreadnet/do ...

了解了,谢谢版主了。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-5-27 09:42:40
8#
嗯,不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部