Как заставить 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
Результаты Теста:
я протестировал его против Википедия список примеров и мои собственные примеры до сих пор на положительных и отрицательных. Я также протестировал с несколькими значениями, которые дали мне проблемы на раннем этапе, и все, похоже, производят правильный результаты.
Я также протестировал несколько значений, которые дали мне проблемы на раннем этапе, и все, похоже, дают правильные результаты.
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 значимые цифры, добавив десятичную точку после числа.
т. е. #,###. показал бы цифры в тысячах. #,###.. показывает цифры в миллионах.
надеюсь, что это помогает