10

我正在使用 excel,我想显示一定数量的有效数字的值。

我尝试使用以下等式

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

将 value 替换为我正在使用的数字,并将 sigfigs 替换为我想要的有效数字的数量。

这个公式有时有效,但有时无效。

例如,值 18.036 将更改为 18,它有 2 个有效数字。解决此问题的方法是更改​​源格式以保留 1 个小数位。但这可能会引入一个额外的重要数字。例如,如果结果是 182,然后小数位将其更改为 182.0,那么现在我将有 4 个 sig figs 而不是 3 个。

如何让 excel 为我设置 sig figs 的数量,这样我就不必手动计算了?

4

10 回答 10

5

公式(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

如果您不介意使用字符串而不是数字,则可以将格式字符串(例如,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 中获得的数字用于其他数学运算。

于 2013-12-17T22:51:35.797 回答
5

警告:前面的疯狂长 excel 公式

我还希望使用重要数字,但我无法使用 VBA,因为电子表格无法支持它们。我去了这个问题/答案和许多其他网站,但所有答案似乎并没有一直处理所有数字。我对接受的答案很感兴趣,它已经接近了,但是一旦我的数字< 0.1,我就得到了#value!错误。我敢肯定我可以修好它,但我已经走上了一条路,只是继续前进。

问题:

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

解决方案:

我的解决方案是一个 excel 公式,它返回带有正数和负数所需有效数字的文本值。

它很,但根据我的测试(如下所述)似乎生成了正确的结果,无论请求的数字和有效数字如何。我确信它可以简化,但目前不在范围内。如果有人想建议简化,请给我留言!

=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 开始

试验结果:

到目前为止,我已经针对维基百科的示例列表和我自己的示例进行了正面和负面的测试。我还测试了一些早期给我带来问题的值,并且似乎都产生了正确的结果。

来自维基百科示例的结果

我还测试了一些早期给我带来问题的值,现在似乎都产生了正确的结果。

3 无花果测试

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

笔记:

处理负数

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

构建方法: 最初在excel中分为大约6列执行各个步骤,最后我将所有步骤合并到上面的一个公式中。

于 2017-01-27T10:28:43.707 回答
3

使用科学记数法,假设你有 180000 并且你需要 4 个 sigfigs,唯一的方法是输入 1.800x10^5

于 2016-01-24T05:46:50.263 回答
3

我添加到您的公式中,因此它还会自动显示正确的小数位数。在下面的公式中,将数字“2”替换为您想要的小数位数,这意味着您需要进行四次替换。这是更新的公式:

=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。

于 2017-08-14T16:26:36.717 回答
2

这是一个老问题,但我已经修改了 sancho.s 的 VBA 代码,使其成为一个接受两个参数的函数:1)您要使用适当的 sig figs ( val) 显示的数字,以及 2) sig figs 的数量( sigd)。您可以将其保存为 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

到目前为止,它似乎适用于我尝试过的所有用例。

于 2016-10-13T20:32:43.060 回答
1

四舍五入到有效数字是一回事......上面已解决。格式化为特定位数是另一回事......我会把它贴在这里给那些试图做我曾经做过的事情并最终来到这里的人(因为我将来可能会再次这样做)......

显示四位数的示例:

.

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

新规则 > 仅格式化包含

单元格值 > 介于 > -10 > 10 > 格式数字 3 位小数

新规则 > 仅格式化包含

单元格值 > 介于 > -100 > 100 > 格式数字 2 位小数

新规则 > 仅格式化包含

单元格值 > 介于 > -1000 > 1000 > 格式数字小数点后 1 位

新规则 > 仅格式化包含

单元格值 > 不介于 > -1000 > 1000 > 格式数字 0 位小数

.

确保这些按此顺序排列并选中所有“如果为真则停止”框。

于 2017-05-09T22:51:07.073 回答
1

下面的公式工作正常。有效数字的数量在第一个文本公式中设置。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 有效,如果您的数字超出此范围,则增加最后三个零的数量,并将第二个 4 更改为零的数量 +1。

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

于 2017-07-29T10:59:43.123 回答
1

作为一种非常简单的显示度量,无需使用四舍五入功能,您可以简单地更改数字的格式,并通过在数字后添加小数点来去除 3 位有效数字。

IE #,###。将显示以千为单位的数字。#,###.. 以百万为单位显示数字。

希望这可以帮助

于 2018-01-26T09:01:59.807 回答
0

您可以尝试自定义格式。

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

对于三个有效数字,我在自定义类型框中输入:[>100]##.0;[<=100]#,##0

于 2015-05-27T22:20:42.020 回答
-1

你可以试试

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

value :: 您要四舍五入的数字。

sigfigs :: 您要四舍五入的有效数字的数量。

于 2017-04-14T10:59:03.500 回答