如何让excel显示一定数量的有效数字?

我正在使用Excel,我想显示一定数量的重要数字的值。

我试着用下面的等式

=ROUND(value,sigfigs-1-INT(LOG10(ABS(value)))) 

用我使用的数字取代了数值,用我想要的有效数字代替sigfigs。

这个公式有时会起作用,但有时候却不行。

例如,价值18.036,将改为18,其中有2个有效数字。 解决方法是更改​​源格式以保留1位小数。 但是,这可以引入一个额外的重要数字。 例如,如果结果是182,然后小数点变成了182.0,现在我会有4个sig fig而不是3。

我如何得到excel来设置sig figs的数量,所以我不必手动弄清楚。

公式(A2包含值和B2 sigfigs)

 =ROUND(A2/10^(INT(LOG10(A2))+1),B2)*10^(INT(LOG10(A2))+1) 

可能会给你你想要的数字,比如C2。 但是如果最后一个数字是零,那么它将不会以常规格式显示。 然后,您可以应用特定于该组合(数值,sigfigs)的数字格式,即通过VBA。 以下应该工作。 你必须传递三个参数(val,sigd,trg)trg是要格式化的目标单元格,你已经有了你想要的数字。

 Sub fmt(val As Range, sigd As Range, trg As Range) Dim fmtstr As String, fmtstrfrac As String Dim nint As Integer, nfrac As Integer nint = Int(Log(val) / Log(10)) + 1 nfrac = sigd - nint If (sigd - nint) > 0 Then 'fmtstrfrac = "." & WorksheetFunction.Rept("0", nfrac) fmtstrfrac = "." & String(nfrac, "0") Else fmtstrfrac = "" End If 'fmtstr = WorksheetFunction.Rept("0", nint) & fmtstrfrac fmtstr = String(nint, "0") & fmtstrfrac trg.NumberFormat = fmtstr End Sub 

如果你不介意有一个string,而不是一个数字,那么你可以得到格式string(在,如D2)作为

 =REPT("0",INT(LOG10(A2))+1)&IF(B2-(INT(LOG10(A2))+1)>0,"."&REPT("0",B2-(INT(LOG10(A2))+1)),"") 

(这复制VBA代码),然后使用(例如E2)

 =TEXT(C2,D2). 

其中单元格C2仍具有上面的公式。 您可以使用单元格E2来进行可视化,如果需要,可以使用单元格C2中获得的数字来计算其他math。

使用科学记数法,如果你有180000,你需要4 sigfigs唯一的办法是键入为1.800×10 ^ 5

这是一个古老的问题,但我修改了sancho.s'VBA代码,这是一个函数,它有两个参数:1)用合适的sig fig( val )显示的数字,以及2)sig无花果( sigd )。 你可以把它作为一个附加function保存在Excel中作为一个普通的函数来使用:

 Public Function sigFig(val As Range, sigd As Range) Dim nint As Integer Dim nfrac As Integer Dim raisedPower As Double Dim roundVal As Double Dim fmtstr As String Dim fmtstrfrac As String nint = Int(Log(val) / Log(10)) + 1 nfrac = sigd - nint raisedPower = 10 ^ (nint) roundVal = Round(val / raisedPower, sigd) * raisedPower If (sigd - nint) > 0 Then fmtstrfrac = "." & String(nfrac, "0") Else fmtstrfrac = "" End If If nint <= 0 Then fmtstr = String(1, "0") & fmtstrfrac Else fmtstr = String(nint, "0") & fmtstrfrac End If sigFig = Format(roundVal, fmtstr) End Function 

它似乎在我迄今为止尝试过的所有用例中都有效。

警告:超前疯狂的超级公式

我也希望与重要的人物合作,因为电子表格不能支持他们,所以我无法使用VBA。 我去了这个问题/答案和许多其他网站,但所有的答案似乎并不处理所有的数字。 我对接受的答案感兴趣,并且接近了,但是一旦我的数字小于0.1,我就得到了一个#值 错误。 我确信我可以修好它,但我已经走了一条路,只是继续前进。

问题:

我需要报告数量在10 ^ -5到10 ^ 5之间的正数和负数的有效数字。 此外,根据客户(和紫色math ),如果提供了100的值,并且精确到+/- 1,并且我们希望呈现3个无花果,那么答案应该是“100”。 所以我也包括在内。

解:

我的解决scheme是一个Excel的公式,返回文本值与正负数所需的有效数字。

这很 ,但似乎根据我的testing(下面概述)产生正确的结果,无论数量和要求的有效数字如何。 我相信它可以简化,但目前还没有范围。 如果有人想提出简化,请给我留言!

 =TEXT(IF(A1<0,"-","")&LEFT(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1),(""&(IF(OR(AND(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1)+1=sigfigs,RIGHT(LEFT(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1),1)="0"),LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"))<=sigfigs-1),"0.","#")&REPT("0",IF(sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1))>0,sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1)),0))))) 

注意:我有一个名为“sigfigs”的命名范围,我的数字从单元格A1开始

检测结果:

我已经testing了它对维基百科的例子列表和我自己的例子到目前为止的积极和消极。 我还testing了一些早期给予我的问题的值,并且都似乎产生了正确的结果。

来自Wikipedia例子的结果

我也testing了一些早期给予我的问题的值,现在都似乎产生了正确的结果。

3 Sig无花果testing

 99.99 -> 100. 99.9 -> 99.9 100 -> 100. 101 -> 101 

笔记:

处理负数

为了处理负数,如果小于0,则包含一个带负号的连接,并将所有其他工作的绝对值使用。

施工方法:最初在excel中分成大约6栏进行各个步骤,最后我把所有的步骤合并成上面的一个公式。

我添加到你的公式,所以它也会自动显示正确的小数位数。 在下面的公式中,将数字“2”replace为所需的小数位数,这意味着您需要进行四次replace。 这里是更新的公式:

 =TEXT(ROUND(A1,2-1-INT(LOG10(ABS(A1)))),"0"&IF(INT(LOG10(ABS(ROUND(A1,2-1-INT(LOG10(ABS(A1)))))))<1,"."&REPT("0",2-1-INT(LOG10(ABS(ROUND(A1,2-1-INT(LOG10(ABS(A1)))))))),"")) 

例如,如果单元格A1的值为= 1/3000,即0.000333333 ..,则上面写入的公式将输出0.00033。

您可以尝试自定义格式。

这是一个速成课程: https : //support.office.com/en-nz/article/Create-a-custom-number-format-78f2a361-936b-4c03-8772-09fab54be7f4 ?ui = en-US &rs = en-NZ&add = NZ 。

对于三位有效数字,我在自定义types框中input:[> 100] ##。0; [<= 100]#,## 0

你可以试试

 =ROUND(value,sigfigs-(1+INT(LOG10(ABS(value))))) 

value ::你想要的数字。

sigfigs ::你想要的有效数字的数量。

四舍五入到有效数字是上面提到的一件事情。 格式化为特定数量的数字是另一个…我会在这里发布它为你尝试做我所做的事情,并在这里结束(因为我将来可能会再次)…

示例显示四位数字:

使用主页>样式>条件格式

新规则>只格式化包含的单元格

单元格值>之间> -10> 10>格式3位小数

新规则>只格式化包含的单元格

单元格值>> -100> 100之间>格式2位小数

新规则>只格式化包含的单元格

单元格值>之间> -1000> 1000>格式编号1位小数

新规则>只格式化包含的单元格

单元格值>不在> -1000> 1000之间>格式编号为0的小数位数

确保这些是按照这个顺序,并检查所有的“如果真的停止”框。

下面的公式工作正常。 有效数字的数量在第一个文本公式中设置。 3sf为0.00和4,2sf为0.0和3,5sf为0.0000和6等。

 =(LEFT((TEXT(A1,"0.00E+000")),4))*POWER(10, (RIGHT((TEXT(A1,"0.00E+000")),4))) 

该公式适用于E +/- 999,如果有一个数字超过了这个数字,则会增加最后三个零的数量,并将第二个数字更改为零的数字+1。

请注意,所显示的值将四舍五入为有效数字,并且应该仅用于显示/输出。 如果您正在进一步计算,请使用A1中的原始值来避免传播较小的错误。