十进制数,有效数字

时间:2018-05-24 16:50:52

标签: libreoffice-calc

我很确定这必须经过多次讨论。我仍然会问,因为我没有找到任何有用的讨论。

问题很简单,有没有办法强制LibreOffice Calc保留输入的数字。当一个人输入1.0 calc时,将其保存为1。这显然是错误的。这两个数字完全不同,1.21.20不同。我知道,人们可以使用格式进行正确的显示,但又一次。您正确输入内容,calc错误地保存,然后您使用格式来纠正错误。但重点是由于此功能导致无法恢复的信息。由于号码内部保存错误,除了保存号码两次以外,没有办法恢复信息,一旦保存号码然后输入必要的更正,以便以后可以恢复全部信息(你可以想到第二块您必须输入的格式化信息。)

那么是否有一些杂项设置可以覆盖这种默认的愚蠢行为?

1 个答案:

答案 0 :(得分:1)

首先讨论是否只存储十进制数的数学值而不是输入的小数位数(如果它们是0,因此数学值不需要)可能会丢失信息:

是的,如果某处同意显示的小数位数表示测量精度,则可能是这种情况。如果是这种情况,则1.2和1.20以及1.200具有不同的含义。但在纯粹的数学意义上,1.2和1.20和1.200的值完全相同。

现在Calc

它存储数字的数学值。这是因为它不知道显示小数位数表示测量精度的任何协议。

关于如何在Calc中尊重该协议的想法:

可以尝试编程Listener来监视Calc个单元格中数字的输入,然后使用不同的数字格式根据输入的小数位数来格式化单元格。示例:如果输入1.2,则使用数字格式0.0,如果输入1.20,则使用数字格式0.00,如果输入1.200,则使用数字格式0.000等等。 ::com::sun::star::sheet::SheetCell支持XModifyBroadcaster。但XModifyListener.modified被称为迟到。如果它被调用,那么如果输入1.2000,则值已经变为1.2。所以这是死路一条,至少对我而言。也许有人可以在调用modified之前输入到单元格中时听到键盘事件的可能性。

我能想到的唯一可能的“解决方案”是那些符合显示小数位数表示测量精度的协议的单元格将使用数字格式Text = @进行格式化。格式化为这样的单元格将所有输入作为文本。因此,如果输入1.2000,则单元格将其存储为文本“1.2000”而不是数字1.2。但是,当然必须记住,如果稍后需要使用这些值进行计算,则存储的值是文本。