我有一个包含 16 位小数的数字数组。当我将它们复制到 Libre Office Calc 电子表格中时,数字会四舍五入到小数点后第 15 位。我认为这是由于 double/real 数据类型的存储内容受到限制的结果。
需要明确的是,这不是格式问题。我已将单元格格式调整为显示 16 位小数,结果确实如此。然而,第 15 位之后的数字将四舍五入为零,并且我尝试对额外零进行的任何手动更正都会立即被丢弃。
有什么解决办法吗?例如,我可以将数据类型从 double/real 更改为 Libre Office Base 的小数吗?
答案1
答案2
侏儒'数字的' 而不是 LibreOffice Calc 或 Microsoft Excel,让您可以显示更多数字。它还具有处理 Calc *.ods 或 Excel *.xls(x) 文件的能力:-)
请注意,精度以及正确数字的数量仍然取决于所使用的 IEEE 数据类型,以及标准的“双精度” ' 版本在大多数范围内限制为 16 位有效数字,而只有15个!在“十次方范围边界”下方的二进制范围内,例如 [ 0.5 .. 1 )、[ 8 .. 10 )、[ 64 .. 100) ...如果您可以将数据保留在这些范围之外,那么您就完成了。
如果不是,很少使用的“long double”版本可以帮助您。它允许可靠地存储 18 和大多数范围内的 19 sig。只要绝对值保持在 1E-4932 和 1E+4932 之间,就可以为十进制数字。
看来长版本的精度限制并未在所有范围内达到,因此您可能在 1E-2 和 2^69 之间有 19 位安全数字( 590295810358705651700 )。投入生产前仔细复查!
请注意,Calc 和 Excel 无法处理额外的精度!如果与文件一起保存,则会将其销毁。
[编辑2022-05-29]添加我忘记的信息:gnumeric需要Linux作为操作系统,对于Win有一个旧版本。 17 年 12 月?可用,但据我所知没有“长”。
对于@G-Man 的请求...:我 - 试图 - 保持我的答案简短,任何互联网搜索都会引导您到gnumeric: http://www.gnumeric.org/
,从那里探索您还会找到开发长版本。我也这么做了!明确区分并解释有多少位数字是正确的 - 从十进制 POV - 哪个版本以及哪个范围。尝试使其更清楚:电子表格中的单元格值可以被视为十进制值的二进制代表/代表/近似值 -小数视角-,那么 bin 数据类型的网格/粒度/精度 capa 之后的数字是错误的 - 我称它们为转换工件,或作为 bin 值本身 -二元视角,则 gnumeric 显示的所有数字都是正确的,但输入和输出的精度受到可用位可以保持的精度的限制。
两个 POV 之间差异的示例:计算 IEEE 双精度数的第 17 位数字。它们与 bin 值“最接近”是正确的,但恕我直言,十进制不正确,因为并非所有附近的 17 位值都可以用双精度数表示,因此第 17 位可能与意向略有偏差。 [ /编辑 ]