保持有效数字的准确性(Microsoft Excel)
Ken询问是否可以保持输入Excel的值的有效位数。例如,“ 12.345600”和“ 1.230”。
简而言之,肯,你不能。为什么?因为Excel总是在内部将所有内容转换为15个有效数字。这,如果您输入12或12.0或12.00000,则Excel始终将它们视为与12.0000000000000相同,即使从最真实的数学意义上说,这在技术上可能并不正确。此外,由于Excel将所有内容都转换为15个有效数字,因此它会截断使用常规数字格式显示的任何数字中的任何尾随零。
(从上面的解释中可以明显看出,术语“有效位数”,“精度”和“小数位数”是完全不同的意思。例如,数字12.000具有三个小数位,但具有五个有效数字。 (如果我输入错误,我敢肯定听众中的数学理论家会很乐意纠正我。)
|您可以为单个单元格使用自定义数字格式,这将显示您的信息使用正确的有效数字位数,但这不会影响Excel内部的工作方式,例如,您可以设置单元格的格式以显示12或12.0或12.00000,但这不会改变Excel仍将所有数字视为是12.0000000000000。
作为替代,解决此问题的一种方法是在数字前面加上撇号,以数字形式输入您的数字。然后将条目解析为文本(由于‘ trophe),并在单元格中显示12.0。这种方法的唯一缺点是您不能在所有数学函数中直接引用单元格。其中一些将返回错误,因为您要在函数中包含Excel认为是文本的内容。解决此问题的最简单方法是确保将= VALUE函数包含在整体公式中。例如,如果您在单元格B7中输入数字作为文本,然后需要在公式中引用它,则可以通过以下方式进行操作:
=VALUE(B7) * 100
这对于具有单单元格引用的公式非常有用。但是,它不适用于范围参考。如果需要对以文本形式输入的一系列值求和或取平均值,则Excel每次都会阻塞,并根据函数的作用返回错误。
这将我们带到第二种可能的解决方案:将有效数字或小数位数保持与实际值分开。对于许多技术数学目的,这是处理这种情况的最佳方法。例如,在C列中,您可以输入数字作为数字。 Excel当然会将其内部转换为15个有效数字。在D列中,您可以输入各种数字,这些数字表示要应用于C列中的值的小数位数。然后,您可以使用D列中的值来帮助引用C列中值的公式。
||最终的解决方案是简单地格式化每个单元格,使其仅显示要显示的小数位数。
鉴于上面的警告(这种格式不会影响Excel内部数字的内部表示形式),这可能是最好的解决方案。当然,单独调整几个单元格的显示格式很容易,但是对一百或五百个单元格进行显示却是另一回事。这是宏可以派上用场的地方。请考虑以下宏:
Sub SigPlaces() Dim c As Range Dim strcell As String, NumFormat As String, DecSep As String Dim DecPtLoc As Integer, stringLen As Integer Dim numDecPlaces As Long DecSep = "." For Each c In Selection.Cells strcell = c.Value If IsNumeric(strcell) Then NumFormat = "#0" DecPtLoc = InStr(strcell, DecSep) If DecPtLoc > 0 Then NumFormat = NumFormat & DecSep stringLen = Len(strcell) numDecPlaces = stringLen - DecPtLoc NumFormat = NumFormat & String(numDecPlaces, "0") End If c.Value = Val(strcell) c.NumberFormat = NumFormat End If Next c End Sub
如果您输入数字作为文本(带有上述的撇号),则可以选择单元格并运行此宏。文本条目将转换为数字,并且更改应用于这些单元格的格式,以便显示与在文本条目中输入的相同的小数位数。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(2045)适用于Microsoft Excel 97、2000、2002和2003。