ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: wwwchao

[求助] 难,难,难!关于excel数值进行乘法计算之后,数值出现不准确的疑惑

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-30 20:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
回复这么多,非常感谢大家,就不一一言谢了!
特别感谢一下17楼的coraltt大侠,你的方案是可行的,咱俩的想法是一致的。
说一下这件事情的一些原委。
首先,这是一个真实的工程上的国际合同文本,甚至有点涉及到中国企业形象(或者说中国人的能力),所以有人提议改公式(round之类)是原则上不允许的。
其次,9楼的链接我当时没能打开(现在也没能打开),我猜是一些理论上的描述,而非解决具体问题的切中肯棨,在真实企业的工程上,解决问题是最优先的。
最后,根据合同文本的两处问题,我解决时用了两种方法(一种方法只能解决一处的),一是4楼djjy2006大侠的方法,一是17楼coraltt大侠的方法(我之前也想到了)。
鼠标双击单元格再回车,必然涉及重新运算,虽然可以勾掉‘自动计算’选择‘手动计算’来解决这个问题,但是我自己还是想知道是怎样重新计算的。
浮点计算会失真的事,之前我也是知道的。
总之,通过大家的讨论,开阔了我的视野,让我受益匪浅的同时,也出色地完成了国际合同文本,没让我们中国企业丢人。再次感谢大家的积极参与,希望以后继续多多关照!

TA的精华主题

TA的得分主题

发表于 2011-10-30 23:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 灰袍法师 于 2011-10-30 23:15 编辑

首先,这是一个真实的工程上的国际合同文本,甚至有点涉及到中国企业形象(或者说中国人的能力),所以有人提议改公式(round之类)是原则上不允许的。
========================================
既然你认为已经解决了,那么就好
不过。。。我要澄清的是,17楼"将精度设置为以显示为准"的做法,其本质等于在所有excel单元格自动应用 round 公式
所以。。。实际上比只在结果单元格采用round公式更不好,因为如果存在大量引用的“中间”单元格,那么这些中间结果的“自动round”会导致最终结果出现很大误差。
典型的如
a1=1
a2=3
a3=a1/a2
a4=a3*a2
如果你用17楼的做法,那么a4=0。
如果你a4采用round函数,那么 a4=round(a3*a2,0) = 1
其实你勾选"将精度设置为以显示为准",Excel就会警告你了。
我个人认为这个做法是非常不可取的,等于完全放弃浮点数带来的便利,把Excel计算全部变成精度很低的整数运算,简直就是大倒退吖!
实在不懂为什么这么多人喜欢用还到处推荐。

TA的精华主题

TA的得分主题

发表于 2011-10-31 06:44 | 显示全部楼层
本帖最后由 msconfig98 于 2011-10-30 17:45 编辑
wwwchao 发表于 2011-10-30 07:02
回复这么多,非常感谢大家,就不一一言谢了!
特别感谢一下17楼的coraltt大侠,你的方案是可行的,咱俩的想 ...

先不说计算机表示小数有误差的问题
最简单的 1/3 的值 就无法用小数精确地表示,因为它是无限循环小数
还有无限不循环小数,比如 圆周率,自然对数的底。。。

只要是浮点数运算,就会有误差的问题。所以才有说法 精确到小数点后多少位
所以只要2个浮点数的差别在可以接受的误差范围以内,就可以认为2个浮点数是相等的。
比如用公式表示  =IF(ABS(A4-A3)<1e-6,"OK","FALSE")

用round也是一样的道理。完全不理解为什么是不允许的。难道觉得是cheating吗?
那样的话,用17楼的做法,就是明知道是cheating,还要自欺欺人。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-1 21:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看到22楼、23楼还在回复,谢谢你们有这样执着的精神。
从何说起呢,,这么说吧,实际应用和理论研究有很大不同的。这一点,我以一个在软件行业打拼16年的经验者的角度,得出的深刻体会。
举个不太贴切的例子,比如Windows的内核与Unix相比很脆弱,简直可以说不在一个数量级上,但是从商业角度来看,无疑Windows是极为成功的。
究其原因,很简单,广大用户并不那么在意软件底层是如何运算,也不在乎内核程序的逻辑是多么多么的合理,给用户看到的,只有谁的界面更精美,谁的操作更方便。
在企业实际应用中就是这样,选择解决方案时,并不一定要采用理论上最正确的方案,采用的是最合适的方案。因为,这是血淋淋的市场,不是美丽的大学象牙塔。
至于在这个实例中为什么不能使用round,因为那是对方做的单元格,不是我方做的单元格,为了达到我方目的,厚着脸皮去要求对方修改,是很丢人的事,也是商业大忌。
双方合作的基础是各司其职。没有分工就没有合作。没有合作就没有商业。没有商业我就不能挣工资养家糊口。。。很简单的一件事嘛。
至于23楼说的欺骗,看欺骗这个词你怎么定义了呵呵。比如去饭店吃饭,你也乐意吃到制作精美的美食吧,如果服务员用搅拌机都打成糊糊端上来,然后告诉你成分都是一样的,而且这样更容易消化,更利于人体吸收,绝对是健康食品,,估计你的想象力再强也没胃口吃下去吧。再比如QQ,98年我就知道它是用UDP协议做出来的,那是一种非常不完备的协议,安全性也不好,在一个专业软件人士看来,QQ那么简单的软件不会有什么前途,可它事实上的普及却让我们所谓的专业人士大跌眼镜。
总之一句话,套用广告词:有效就是硬道理。 感谢大家能坚持看到这里。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-21 00:45 , Processed in 0.018698 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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