ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: apolloh

保留有效位数并四舍六入2004-11-26新*

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-12-1 16:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

负数包含不会影响使用吧,如果只使用自定函数的话,指数可以去掉。

思考中。。。

楼下wssf兄,此问题偶正在思考一个两全其美的方案,请你等待些时候,不好意思

[此贴子已经被作者于2004-12-4 22:48:07编辑过]

TA的精华主题

TA的得分主题

发表于 2004-12-4 21:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
apolloh大师:您说得对,负数的存在不会影响使用,如能去一下指数对我来说就非常好用了。谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-12-10 15:11 | 显示全部楼层

wssf兄,偶试了很多方法,发现要完全合并起来很困难,就简单的做了个互斥的选项,应该够解决你的问题了。

98YGkBNw.rar (16.54 KB, 下载次数: 134)

TA的精华主题

TA的得分主题

发表于 2004-12-10 23:56 | 显示全部楼层

apolloh大师:真是太好了。已经麻烦您不少了。真佩服您们把这些字符捣鼓得这么熟练,好像捏面团似的。称大师不为过。这个问题在我所知道的Excel office 之类网站上贴过好长时间,包括好多斑竹大人帮忙,好像没有十分准确的。现在基本可以使我的数据库的数据处理完全符合国家规范要求。谢谢! 谢谢!

TA的精华主题

TA的得分主题

发表于 2005-2-19 15:10 | 显示全部楼层

apolloh大师:你真是了不起。

关于四舍六入五取偶的问题,譬如0.995进位为1.00还是1.0的问题。实际上应该是这样理解———① 修约进位规则按照四舍六入五取偶的原则,即国标的规定。② 同时结果必须保留小数点后两位小数,即精确到小数点后两位。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-2-19 18:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下是引用176在2005-2-19 15:10:00的发言:

apolloh大师:你真是了不起。

关于四舍六入五取偶的问题,譬如0.995进位为1.00还是1.0的问题。实际上应该是这样理解———① 修约进位规则按照四舍六入五取偶的原则,即国标的规定。② 同时结果必须保留小数点后两位小数,即精确到小数点后两位。

欢迎176新朋友!

称大师实在不敢,在excel的世界里高手如云,这里就有好多,以后你来多了就知道了。可别盲目崇拜哦!

另外,上面帖子讨论的问题好象和你说的不同

问题是这样的,我们预定要保留两位有效数字(不是指小数位),那么0.995应该写成1.0(这里已经是两位有效位了)还是需要进位位1.00。

TA的精华主题

TA的得分主题

发表于 2005-4-18 23:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

一个简单的自定义函数,可以解决问题

VBA的round()函数本身就有这个四舍六入五奇偶的功能,只是由于计算误差,在保留位数为1位以上时不准确。

以下自定义函数,m为要进行舍入的数字,n为舍入的基数,如10,1,0.1,0.01,0.02,0.05,0.005等

Function round2(m, n) round2 = Round(Round(m / n, 10)) * n End Function

本人已在excel2000和2003上验证,请有兴趣者测试一下,有问题请联系cc_dy@163.com

[此贴子已经被作者于2005-4-19 15:35:21编辑过]

TA的精华主题

TA的得分主题

发表于 2005-4-19 00:06 | 显示全部楼层
[em06][em06]你发了2个round2(1.245001,0.01)=1.24不对了。

TA的精华主题

TA的得分主题

发表于 2005-4-19 15:41 | 显示全部楼层

谢谢老兄帮助测试,这个问题其实是个计算精度的问题,将公式中的3改为大一些的数,如10可以解决。

此值也不能设得太大,超过VBA数据类型要求,可根据实际需要设置。

这个数,如3或10,带来了舍入误差,一般应用3就足够了。

设为3,n为0.01时带来的舍入误差是0.01*0.001*0.5=0.000005所以1.245001~0.245005都会舍入为1.24。

增加这个数值可提高计算精度,设为a,舍入误差为n*a*0.5

请指正。

顺便说一句,我只写了一个ROUND2,另一个是其它仁兄写的

Function round2(m, n) round2 = Round(Round(m / n, 10)) * n End Function

[此贴子已经被作者于2005-4-19 17:04:33编辑过]

TA的精华主题

TA的得分主题

发表于 2005-4-19 16:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

按基数和按有效数字位数的两个简单的自定义修约函数

Function round2(m, n) round2 = Round(Round(m / n, 3)) * n End Function Function round3(m, n) a = Int(Log(Abs(m)) / Log(10#)) round3 = round2(m, 10 ^ (a - n + 1)) End Function

round2(m,n) n 为修约基数,如10,1,0.1,0.01,0.02,0.05等,修约精度为n*0.001*0.5

关于修约精度问题见本人上贴

round3(m,n) n 为保留的有效数字位数,如1、2、3等,round3引用了round2,必须写在同一模块

请网友们帮助测试,联系方式cc_dy@163.com

[此贴子已经被作者于2005-4-19 17:01:51编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 02:44 , Processed in 0.049101 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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