尽管 worksheet.xml 和 styles.xml 中没有存储关于小数精度的信息,但 Excel 如何正确显示小数值?

Thu*_*uck 5 excel openxml openxml-sdk

以下是我正在执行的检查行为的步骤:

1# 创建一个 Excel(xlsx) 文件,将 1234.56789 放在一个单元格中,保存它。
2#解压.xlsx文件,查看sheet1.xml和styles.xml文件。

在 xl/worksheets/Sheet1.xml 中,您将看到以下内容:

<sheetData><row r="1" spans="1:1" x14ac:dyDescent="0.25"><c r="A1" s="1"
<v>25778.567889999998</v>
</c></row></sheetData>
Run Code Online (Sandbox Code Playgroud)

Styles.xml 中没有关于原始数字精度的信息,即1234.56789.

当我们在 MS Excel 中打开 Excel 时,它如何显示原始值?
尽管提取的文件中没有信息,它如何重建原始数字?

请注意,我没有更改单元格格式类型或任何内容,因此单元格格式为 General。

我知道因为 Excel 将数字存储为浮点数,所以它无法将值保存到完美的精度,我无法理解的是当我在 MS Excel 中打开它时它如何保留原始值。我正面临一个关于使用 OpenXML SDK 读取 Excel 文件的问题,但在询问该问题之前,我正在寻找这个更基本问题的答案。

dew*_*led 1

它只是将输入精度限制为 15 位数字,例如尝试放入25778.567889999955单元格并看到它立即转换(在 Excel 本身中)为25778.56788999991.23456789123456789变成1.23456789123456。有关数字表示内部结构及其如何影响计算的更多详细信息,请参阅这篇精彩的维基百科文章

  • 是的,我知道,这个答案与我上面所说的场景无关。我的原始条目是 9 位数字,精度为 5。sheet1.xml 存储为 17 位浮点数,这当然是不准确的,精度为 14。我的问题是 MS excel 如何从 17 位数字重建精确的 9 位数字sheet.xml 中的值?如果仅四舍五入到 15 位数字的限制,则不会重建 9 位数字的原始值。 (2认同)