尽管格式选项甚至在公式中,Excel 都会将 3 个十进制数字更改为完整数字

标签 excel vba rounding

我的一个同事给我发了他们的 Excel 表,让我看一下。问题在于,对于一​​个非常具体的数字 (56136.598),Excel 会自动将该数字外推到小数点后 10 位,而不管格式选项如何。

单元格将数字显示到正确的 3 个小数位,但如果您查看公式栏中的数字,它会显示所有 10 个小数位。如果我编写公式 =round(56136.598,3),它甚至会将数字更改为小数点后 10 位。至=round(56136.5979999999,3) .

不幸的是,鉴于我所在的行业,我需要解释一下为什么这个非常具体的数字会导致这种变化。仅使用 round 或 trunc 函数将其截断到小数点后 3 位是不够的,这个数字和这个单元格的设置与其他并行单元格计算的设置不同,这一事实引起了一些批评。有没有人遇到过这个?我已经在 Excel 2010 和 2019 以及新工作表中尝试过,同样的问题。似乎 excel 拒绝接受小数点后 3 位的数字,并自行强制扩展至小数点后 10 位。

最佳答案

这是正常行为。见下图,我刚输入 56136,598进入细胞。

enter image description here

这是因为 Excel 是一个数值计算程序而不是代数程序。所以这是一个精度问题。另见 Numeric precision in Microsoft Excel .

Excels 结果不是绝对的,但非常接近正确。这些与数字之间的差异几乎为 0(差异为 0,0000000001 )。

这实际上也是最常见的计算器的行为方式(你只是没有看到)。这只是计算器(和计算机)工作方式的本质。

所以没有什么可担心的。

更多信息:Understanding Floating Point Precision, aka “Why does Excel Give Me Seemingly Wrong Answers?”

关于尽管格式选项甚至在公式中,Excel 都会将 3 个十进制数字更改为完整数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60775349/

相关文章:

c# - 互操作 Excel 很慢

excel - 在 vba 模块中使用 target.row 时出错

C++ 游戏开发 : truncating float to int

javascript - 将特定 Excel 公式转换为 Javascript

c# - 使用 C# 在 excel 中创建一个矩形?

excel - 有什么方法可以在excel中为相同的相邻单元格着色?

vba - 将电子邮件正文保存到 Word 文档

Excel 2010 中 VBA 中的 SQL 字符串与日期

perl - 将 Perl 中的 Pi 舍入到小数点后第 100 位?

c# - Excel.Worksheet.Cells[row,col] = "=Formula"与 Range.set_Value(Missing.Value, arrayFormulas)