[算表] Excel:一個故意保留下來的BUG--1900/2/29

看板Office作者 (David)時間18年前 (2007/12/04 16:36), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
官方說明(機器翻譯= =) 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

12/06 12:15, , 1F
噗~~感謝您的回答,那我還是相信我自己好了XD
12/06 12:15, 1F

12/07 00:44, , 2F
XD
12/07 00:44, 2F
文章代碼(AID): #17LH5xbK (Office)
文章代碼(AID): #17LH5xbK (Office)