java - Excel 中的 float

标签 java floating-point

我的 Excel 工作表中的 double 值有一个小问题。 double 值是宏计算的结果。 它在单元格中显示为 1.0554。 单元格格式为数字,显示 4 位小数。如果我选择更多小数,则会显示尾随 0(例如 1.05540000)。

我的问题是我正在使用 jxls(使用 Apache POI)读取此文件,并且我得到的值不是 1.0554 而是 1.0554000000000001 (最后 1 位于第 16 位)。

我已将 xls 转换为 xlsx,直接在 xlsx(这是一个包含 xml 文件的 zip 文件,即 ascii 文件)内部检查,保存的值为 1.0554000000000001;但即使我将单元格格式设置为小数点后 32 位的数字,Excel 仍显示 1.0554000...000 且不带任何尾随 1。

所以我想在xls中,实数也保存为1.0554000000000001而不是1.0554。

那么如何在Excel中显示真实的原始值呢?或者强制Excel保存1.0554而不是1.05540000...01?或者用宏检查显示值不是原始值?...

最佳答案

你与 IEE754 诸神发生了冲突。 Double 值有 1 个符号位、11 位指数和 52 位尾数(实际表示有点复杂,但您应该从中了解到数字 1.0554 在 52 位内无法正确表达,因此 double您的 PC 的实现选择最接近的值。

关于java - Excel 中的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28324169/

相关文章:

java - 如何使响应式@WebFilter与@RequestBody正常工作?

java - 我的手电筒第一次工作,下一次强制关闭

algorithm - 计算机编程艺术中approximatelyEqual和essentiallyEqual的区别

c - C99 中是否有固定大小的 float 和 double 类型?

assembly - 指令 FYL2XP1

java - 用户输入 Ctrl+Z 时终止 Java 程序

java - Android Dialog 一直坐立不安 - 不会保持一种尺寸

java - Maven 与 AspectJ - 例子?

Ruby 十进制精度

floating-point - Lua-包装IEEE754单精度 float