作者JieJuen (David)
看板Office
标题Re: [问题] EXCAL中的function EDATE
时间Tue Dec 4 16:36:09 2007
官方说明(机器翻译= =)
http://support.microsoft.com/kb/214326/zh-tw
论坛文章
http://www.officefans.net/cdb/viewthread.php?tid=1006
Excel中一个故意保存下来的Bug
在 Execlhome 应用论坛创建初期,有这样一个帖子:「哪位能明示:1900年2月到底应该
是多少天?」
(请看
http://club.excelhome.net/dispbb ... ID=3908&ID=4560)
参加讨论的几乎全是各版的版主。
在关於「1900年2月究竟有28天还是29天」的讨论中,虽然有人猜疑,Excel 在这里可能
有一个 Bug,但是当时或许谁也没有想到,这居然是一个故意保存下来的 Bug!
原来早期的 Lotus-123 有一个 Bug,把不是闰年的1900年2月算成了闰年。而 Excel 的
设计者发现了这个问题,却选择了保留这个错误,以保持与 Lotus-123 的兼容性。(详
情请看 John Walkenbach 在『Excel 2002 Formulas'中的这段话)
确实,如果我们当初在讨论时再往前跨一步,测试一下 2100年、2300年、2500年的3月1
日减去1天,我们就会得出结论:能够除尽100,但不能除尽400 的年份肯定不是闰年。不
过,谁会想到,Excel 中会有这样的猫腻呢?
对於微软这个不大不小的玩笑不尽服气,我继续对它进行测试,结果发现了另外一个「居
然」!
用 EDATE 这个函数(Mouths 为 1、-1)去计算 1900年的1月31日和3月31日,「居然」
是等於 1900年2月28日!
同一个 Excel,两个均为正确的不同算法,居然可以算出两个不同的结果!
我不禁对那些「倒霉」的用户担心起来:如果因为这一天的误差导致重大的事故和损失,
该怨谁去呢?
※ 引述《sweedy (小米)》之铭言:
: (若是和其他不同软体互动之问题 请记得一并填写)
: 您所使用的软体为: Office EXCEL
: 版本: 2007
: 问题: 起因是因为我想要自己写一个算润年的程式
: 想说用EXCEL做确认的动作
: 不过这时我发现了一个问题
: EXCEL中它是以1900年1月1日做为第一天来计算的,
: 1900年不为润年,因为它为百年且不为400所整除,
: 所以当我输入第59天时,它理所当然的为2月28日,
: 但是当我输入第60天时,它还是2月28日,@@
: 到61天才会变成3月1日,所以我写的程式永远与EXCEL的答案差一天
: 这不知道算不算是个BUG,
: 也不知道我有没有OP (已爬文但没找到相关资讯)
: 请问各位大大,我应该相信我自己还是EXCEL咧..囧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.123.42.107
1F:推 sweedy:噗~~感谢您的回答,那我还是相信我自己好了XD 12/06 12:15
2F:推 JieJuen:XD 12/07 00:44