抱歉,问题标题模糊,但我不确定如何最好地表达这一点。
当我将以下数字粘贴到 Excel 单元格中时:
5000097208326954
它显示为
5E+15
没关系。我明白了。但是,当我查看功能栏时,它显示为
5000097208326950
我确实不是明白。该行为似乎与我之前对单元格进行的任何格式化无关。
这是在 Excel 2003 SP3 上。
我是否错过了一些微妙的预期行为,或者这是一个错误?
答案1
答案2
Excel 将所有数学运算都作为双精度浮点数进行。(总共 64 个二进制位)
这会给出十进制中大约 14 到 15 位有效数字。
5000 097 208 326 954
是 16 位数字。如果您在 Excel 中执行此操作...
A1 = 5000097208326954
A2=A1+1
A3=A2-A1
A3将显示0。
全面披露:我是 ACM 的成员,我有义务向公众告知计算的风险。这是我们的行为准则。
请不要使用 Excel 来处理任何重要的事情。
使用袖珍科学计算器您将获得更准确的答案。
Excel 是用 C/C++ 编写的,使用 64 位数字,它还使用 Microsoft 浮点库来计算 sin、cos 和 exp 等函数。与科学计算库相比,这些库非常不准确,即使对相同大小的数字进行操作也是如此。
浮点数对于简单的东西来说还不错,但对于科学工作或严肃的工程来说却很糟糕,因为它们太不准确了。数值方法需要反复加法和乘法,而浮点数很快就会变得丑陋,因为 15 位精度消失了,每 4 次乘法只剩一位数字。
浮点数不利于财务工作(0.2 是二进制浮点数中的无限循环数)。因此,如果您将 0.2 美元加 1000 次,就会丢失一些钱。金融界的程序员在必要时使用无限精度的数字(就像在纸上写数字一样),然后使用特殊函数进行金钱计算,当所有四舍五入相加时,不会丢失任何钱。
老派程序员使用 FORTRAN 进行数学运算,就像你我一样,它以十进制进行数学运算。FORTRAN 中的库非常准确,因为用户希望使用数值方法;这就是它的用途。计算器内部也使用十进制。
我以前曾使用 Excel 重现 C 程序中的数学四舍五入错误。
通过这种方式,你可以得到漂亮的图表,显示出你的计算完全错误。
答案3
答案4
右键单击某个单元格或所有单元格 > 格式化单元格 > 选择以下格式之一:
- 数字(或其变体):识别为数值
- 文本:最佳选择,因为如果您可以在左侧使用 0,它们就会出现
好吧,我在这里看不到解决方案——只有一些关于科学计数法或十六进制数可能存在的错误的讨论。