Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3124|回复: 9

请教四舍五入到小数点后某位且奇进偶不进的代码

[复制链接]
发表于 2016-5-26 11:46 | 显示全部楼层 |阅读模式
贴上我写的四舍五入到小数点后某位且奇进偶不进的代码,很粗糙,有更好的代码方式吗?请指教。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2016-5-26 11:47 | 显示全部楼层
贴上代码

四舍五入奇进偶不进.zip

1.6 KB, 下载次数: 19

回复

使用道具 举报

发表于 2016-5-26 14:27 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-5-26 15:21 | 显示全部楼层
这个本来是放在excel里表格的代码里的,我把它拷贝出来了而已。。
用来对指定单元格当单元格发生变化时自动对数值四舍五入逢五奇进偶不进
回复

使用道具 举报

 楼主| 发表于 2016-5-26 15:22 | 显示全部楼层
fjmxwrs 发表于 2016-5-26 14:27
你整个文本文件上来做什么?

这个本来是放在excel里表格的代码里的,我把它拷贝出来了而已。。
回复

使用道具 举报

发表于 2016-5-26 16:25 | 显示全部楼层
应该是【四舍六入五留双】的规则吧。

2.49……2.0  4以下舍去
2.5……2.0  逢5留双 留2=2

2.60……3.0  6以上进位
3.49……3.0  4以下舍去

3.5……4.0  逢5留双 3进1=4
3.60……4.0  6以上进位
回复

使用道具 举报

发表于 2016-5-26 19:30 | 显示全部楼层
zkpig 发表于 2016-5-26 15:21
这个本来是放在excel里表格的代码里的,我把它拷贝出来了而已。。
用来对指定单元格当单元格发生变化时自动 ...

具体规则是什么,可以举例说明一下吗
回复

使用道具 举报

发表于 2016-5-27 08:35 | 显示全部楼层
简洁的自定义函数:
  1. Function ROUND2(num, digit)
  2.     num = Format(num, "0." & String(digit + 1, "0")) '按指定小数位数截取有效数字
  3.     If Right(num, 1) = 5 Then If Int(Right(num, 2) / 10) Mod 2 Then t = 10 ^ (-digit - 1)
  4.     '如果末位有效数正好=5 那么如果前1位为奇数则要进位,否则不进位
  5.     ROUND2 = Round(num + t, digit)
  6. End Function
复制代码
回复

使用道具 举报

发表于 2016-5-27 10:23 | 显示全部楼层
Function xjj(c#, d%)
xjj = VBA.Round(CDec(c), d)
End Function  

解释:VBA的round函数,第一参数是double型,由于浮点运算的误差,导致计算机呈现的结果不一定是我们想要的,于是用CDec函数将double型转换为decimal(小数型),能解决精度的问题

然后直接在工作表内使用这个函数就行,第一个参数(D)为要取舍的数,第二个参数(D)为要保留的位数。
回复

使用道具 举报

发表于 2016-5-27 20:03 | 显示全部楼层
d346836673 发表于 2016-5-27 10:23
Function xjj(c#, d%)
xjj = VBA.Round(CDec(c), d)
End Function  

的确是终极版,不错不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2025-8-15 21:59 , Processed in 0.817989 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表