Как заставить 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 для меня, чтобы мне не пришлось выяснять это вручную?

10 ответов


формула (A2 содержит значение и B2 sigfigs)

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

может дать вам номер, который вы хотите, скажем, в С2. Но если последняя цифра равна нулю, то она не будет показана в общем формате. Затем вы должны применить формат чисел, специфичный для этой комбинации (value,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 для другой математики, если это необходимо.


используйте научную нотацию, скажем, если у вас есть 180000, и вам нужно 4 сигфига, единственный способ-ввести 1.800x10^5


предупреждение: crazy-длинная формула excel впереди

Я также хотел работать со значительными цифрами, и я не смог использовать VBA, поскольку электронные таблицы не могут их поддерживать. Я пошел на этот вопрос/ответ и многие другие сайты, но ответов на все вопросы не решать все цифры. Меня заинтересовал принятый ответ, и он приблизился, но как только мои номера были значение#! ошибка. Я уверен, что мог бы все исправить, но ... был уже на тропинке и просто шел дальше.

:

мне нужно было сообщить переменное количество значимых цифр в положительном и отрицательном режиме с числами от 10^-5 до 10^5. Кроме того, согласно клиенту (и фиолетовый math), если значение 100 был поставлен и был точен до + / - 1, и мы хотим представить с 3 SIG FIG ответ должен быть '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

Результаты Теста:

я протестировал его против Википедия список примеров и мои собственные примеры до сих пор на положительных и отрицательных. Я также протестировал с несколькими значениями, которые дали мне проблемы на раннем этапе, и все, похоже, производят правильный результаты.

Results from Wikipedia examples

Я также протестировал несколько значений, которые дали мне проблемы на раннем этапе, и все, похоже, дают правильные результаты.

3 Sig Figs Тест

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

Примечания:

Лечение Отрицательных Чисел

для обработки отрицательных чисел я включил конкатенацию с отрицательным знаком, если меньше 0, и использую абсолютное значение для всех других работа.

способ строительства: Первоначально он был разделен на 6 столбцов в excel, которые выполняли различные шаги, и в конце я объединил все шаги в одну формулу выше.


Это старый вопрос, но я изменил Санчо.s ' VBA код, так что это функция, которая принимает два аргумента: 1) число, которое вы хотите отобразить с соответствующими SIG фиг (val), и 2) число сигов фиг (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

кажется, это работает во всех случаях использования, которые я пробовал до сих пор.


округление до значимых цифр-это одно... рассмотрено выше. Форматирование до определенного количества цифр-другое... и я опубликую его здесь для тех из вас, кто пытается сделать то, что я был и закончил здесь (как я, вероятно, сделаю снова в будущем)...

пример для отображения четырех цифр:

.

Использовать Home > Стили > Условное Форматирование

новое правило > форматировать только ячейки, содержащие

значение ячейки > между > -10 > 10 > Формат числа 3 десятичных знаков

новое правило > форматировать только ячейки, содержащие

значение ячейки > между > -100 > 100 > формат числа 2 десятичных знаков

новое правило > форматировать только ячейки, содержащие

значение ячейки > между > -1000 > 1000 > Format Number 1 decimal place

новое правило > форматировать только ячейки, содержащие

значение ячейки > не между > -1000 > 1000 > номер формата 0 десятичный места

.

убедитесь, что они находятся в этом порядке и установите все флажки "Stop If True".


Я добавил к вашей формуле, так что это также автоматически отображается правильное количество знаков после запятой. В приведенной ниже формуле замените цифру " 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.., приведенная выше формула as-written выводит 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&ad=NZ.

для трех значащих цифр я набираю это в поле пользовательский тип: [>100]##.0;[


можно попробовать

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

стоимостью :: число, которое вы хотите округлить.

sigfigs :: количество значимых фигур, которые вы хотите округлить.


приведенная ниже формула работает нормально. Количество значимых цифр задается в первой текстовой формуле. 0.00 и 4 для 3sf, 0.0 и 3 для 2sf, 0.0000 и 6 для 5sf, etc.

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

формула действительна для E+ / -999, если у вас есть число за этим, увеличьте число последних трех нулей и измените второе 4 на число нулей +1.

обратите внимание, что отображаемые значения будут округлены до существенных цифр, и должны использоваться только для отображения/вывода. Если вы выполняете дальнейшие вычисления, используйте исходное значение в A1, чтобы избежать распространения незначительных ошибок.


как очень простая мера отображения, без необходимости использовать функцию округления, вы можете просто изменить формат числа и удалить 3 значимые цифры, добавив десятичную точку после числа.

т. е. #,###. показал бы цифры в тысячах. #,###.. показывает цифры в миллионах.

надеюсь, что это помогает