这是预期出现较大十六进制数的 Excel 行为吗?

这是预期出现较大十六进制数的 Excel 行为吗?

抱歉,问题标题模糊,但我不确定如何最好地表达这一点。

当我将以下数字粘贴到 Excel 单元格中时:

5000097208326954

它显示为

5E+15

没关系。我明白了。但是,当我查看功能栏时,它显示为

5000097208326950

我确实不是明白。该行为似乎与我之前对单元格进行的任何格式化无关。

这是在 Excel 2003 SP3 上。

我是否错过了一些微妙的预期行为,或者这是一个错误?

答案1

可能有人会给出更好的解释和解决方案,但基本上计算机在表示浮点数和/或大整数时只存储特定数量的有效数字。Excel(至少默认情况下)只提供数字的前 15 位,然后丢弃其余数字。您可以通过在数字末尾添加额外的数字来验证这一点,例如 5000097208326954123,这些数字将四舍五入为 5000097208326950000。

附注一下,你可能有十六进制与数字系统混淆科学计数法

答案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

您问为什么最后一位数字显示为 0 而不是 4,是吗?

我相信链接包含答案。如果您查看计算规范,则最大数字精度为 15 位。查看其他规范,看起来 Excel 可能仍保留您输入的数字的完整值,因此如果您在公式中使用该数字,它仍应正确计算。

说实话,我在大学时根本没法理解显著数的概念,所以我无法告诉你为什么 Excel 要这样设置。

如果有必要,论坛可能会给你提供超越内置限制的指点。

另外,如何格式化 Excel 以将值识别为十六进制而不是十进制?

答案4

右键单击某个单元格或所有单元格 > 格式化单元格 > 选择以下格式之一:

  • 数字(或其变体):识别为数值
  • 文本:最佳选择,因为如果您可以在左侧使用 0,它们就会出现

好吧,我在这里看不到解决方案——只有一些关于科学计数法或十六进制数可能存在的错误的讨论。

相关内容