Google Group里一個(gè)以微軟Office Excel為主題的新聞組里有人報(bào)告說,Excel 2007里存在一個(gè)重大bug,會(huì)將850*77.1錯(cuò)誤地計(jì)算為100000,而不是65535。
當(dāng)然,850*77.1并不是一個(gè)特例,不信你可以在Excel 2007里計(jì)算下邊這些乘法:
=5.1*12850
=10.2*6425
=20.4*3212.5
=40.8*1606.25
=154.2*425
=212.5*308.4
=308.4*212.5
=425*154.2
結(jié)果都是100000吧?
這個(gè)看起來有些不可思議的問題很快得到了多名專家的確認(rèn),Excel MVP Bernad Leingme更是第一個(gè)站了出來。
事實(shí)上,問題出現(xiàn)在65535這個(gè)數(shù)字上。雖然現(xiàn)在還沒能最終肯定到底是什么原因,但考慮到65535這個(gè)數(shù)字的特殊性(轉(zhuǎn)換成二進(jìn)制就是1111111111111111),初步懷疑Excel 2007在浮點(diǎn)計(jì)算或者舍入誤差方面出現(xiàn)了失誤。另外還可以看出,出錯(cuò)的乘法公式中至少有一個(gè)數(shù)字帶有一位小數(shù)。
更進(jìn)一步地,如果把上述乘法之一放在A1單元格里,然后A1+1就會(huì)返回100001,A1*1返回100000,A1/1返回100000。這些無疑都是錯(cuò)誤的,因?yàn)镋xcel 2007已經(jīng)把A1的值當(dāng)成了100000,不過奇怪的是,A1*2返回的卻是正確的131070,A1-1也是65534沒錯(cuò),A1/2也準(zhǔn)確得到了32767.5。Excel 2007如此反復(fù)無常的確令人難以琢磨。
測(cè)試還表明,Office 2000/XP/2003等舊版本都不存在這個(gè)bug,看來只是Office 2007的新“專利”了。
出現(xiàn)這么低級(jí)的bug,微軟工作人員開發(fā)和審核的不嚴(yán)謹(jǐn)是很顯然的,至少可以說是百密一疏,尤其是舊版產(chǎn)品反而沒有問題,無疑會(huì)讓微軟更加尷尬。


當(dāng)然,850*77.1并不是一個(gè)特例,不信你可以在Excel 2007里計(jì)算下邊這些乘法:
=5.1*12850
=10.2*6425
=20.4*3212.5
=40.8*1606.25
=154.2*425
=212.5*308.4
=308.4*212.5
=425*154.2
結(jié)果都是100000吧?
這個(gè)看起來有些不可思議的問題很快得到了多名專家的確認(rèn),Excel MVP Bernad Leingme更是第一個(gè)站了出來。
事實(shí)上,問題出現(xiàn)在65535這個(gè)數(shù)字上。雖然現(xiàn)在還沒能最終肯定到底是什么原因,但考慮到65535這個(gè)數(shù)字的特殊性(轉(zhuǎn)換成二進(jìn)制就是1111111111111111),初步懷疑Excel 2007在浮點(diǎn)計(jì)算或者舍入誤差方面出現(xiàn)了失誤。另外還可以看出,出錯(cuò)的乘法公式中至少有一個(gè)數(shù)字帶有一位小數(shù)。
更進(jìn)一步地,如果把上述乘法之一放在A1單元格里,然后A1+1就會(huì)返回100001,A1*1返回100000,A1/1返回100000。這些無疑都是錯(cuò)誤的,因?yàn)镋xcel 2007已經(jīng)把A1的值當(dāng)成了100000,不過奇怪的是,A1*2返回的卻是正確的131070,A1-1也是65534沒錯(cuò),A1/2也準(zhǔn)確得到了32767.5。Excel 2007如此反復(fù)無常的確令人難以琢磨。
測(cè)試還表明,Office 2000/XP/2003等舊版本都不存在這個(gè)bug,看來只是Office 2007的新“專利”了。
出現(xiàn)這么低級(jí)的bug,微軟工作人員開發(fā)和審核的不嚴(yán)謹(jǐn)是很顯然的,至少可以說是百密一疏,尤其是舊版產(chǎn)品反而沒有問題,無疑會(huì)讓微軟更加尷尬。



