Comment obtenir excel pour afficher un certain nombre de chiffres significatifs?
j'utilise excel et je veux afficher une valeur à un certain nombre de chiffres significatifs.
j'ai essayé d'utiliser l'équation suivante
=ROUND(value,sigfigs-1-INT(LOG10(ABS(value))))
avec la valeur remplacée par le nombre que j'utilise et sigfigs remplacé par le nombre de chiffres significatifs que je veux.
Cette formule fonctionne parfois, mais d'autres fois ça ne marche pas.
par exemple, la valeur 18.036, va passer à 18, qui a 2 chiffres significatifs. Le moyen de contourner cela est de changez le formatage source pour conserver 1 décimale. Mais cela peut introduire un chiffre supplémentaire significatif. Par exemple, si le résultat était 182 et puis la place décimale l'a fait changer à 182.0, maintenant j'aurais 4 sig figs au lieu de 3.
Comment puis-je obtenir excel pour définir le nombre de sig figues pour moi, donc je n'ai pas à le comprendre manuellement?
10 réponses
la formule (A2 contient la valeur et B2 sigfigs)
=ROUND(A2/10^(INT(LOG10(A2))+1),B2)*10^(INT(LOG10(A2))+1)
peut vous donner le numéro que vous voulez, disons, en C2. Mais si le dernier chiffre est zéro, alors il ne sera pas affiché avec un format général. Vous devez alors appliquer un format de nombre spécifique pour cette combinaison (value,sigfigs), et ce via VBA. Ce qui suit devrait fonctionner. Vous devez passer trois paramètres (val,sigd,trg)
,trg
est la cellule cible, si vous avez déjà le numéro que vous vouloir.
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
si cela ne vous dérange pas d'avoir une chaîne au lieu d'un nombre, alors vous pouvez obtenir la chaîne de format (dans, disons, D2) comme
=REPT("0",INT(LOG10(A2))+1)&IF(B2-(INT(LOG10(A2))+1)>0,"."&REPT("0",B2-(INT(LOG10(A2))+1)),"")
(cela reproduit le code VBA) et puis utiliser (dans, disons, E2)
=TEXT(C2,D2).
où la cellule C2 a encore la formule ci-dessus. Vous pouvez utiliser la cellule E2 à des fins de visualisation, et le nombre obtenu en C2 pour d'autres mathématiques, si nécessaire.
utilisez la notation scientifique, par exemple si vous avez 180000 et que vous avez besoin de 4 sigfigs, le seul moyen est de taper 1.800x10^5
attention: crazy-long excel formula ahead
je cherchais aussi à travailler avec des chiffres significatifs et je n'ai pas pu utiliser VBA car les tableurs ne peuvent pas les supporter. Je suis allé à cette question / réponse et beaucoup d'autres sites, mais toutes les réponses ne semblent pas traiter tous les numéros tout le temps. J'étais intéressé par la réponse acceptée et elle s'est rapprochée mais dès que mes nombres étaient < 0.1 j'ai eu un #valeur! erreur. Je suis sûr que j'aurais pu le réparer mais je était déjà sur un chemin et juste pressé.
Problème:
pourpre math), si une valeur de 100 a été fourni et est précis à +/- 1 et nous souhaitons présenter avec 3 sig figues la réponse devrait être " 100. et j'ai donc compris que comme bien.Solution:
ma solution est pour une formule excel qui renvoie la valeur du texte avec les chiffres significatifs requis pour les nombres positifs et négatifs.
long, mais semble produire les bons résultats selon mes tests (décrits ci-dessous), peu importe le nombre et les chiffres significatifs demandés. Je suis sûr que cela peut être simplifié, mais ce n'est pas le cas actuellement. Si quelqu'un veut proposer une simplification, merci de me laisser un commentaire!
=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)))))
Remarque: j'ai une plage appelée "sigfigs" et mes numéros commencent dans la cellule A1
Résultats Des Tests:
je l'ai testé contre l' wikipédia liste d'exemples et mes propres exemples positifs et négatifs jusqu'à présent. J'ai également testé avec quelques valeurs qui m'ont donné des problèmes dès le début et tous semblent produire le bon résultat.
j'ai également testé avec quelques valeurs qui m'ont donné des problèmes tôt et tous semblent produire les bons résultats maintenant.
3 Figs Test
99.99 -> 100.
99.9 -> 99.9
100 -> 100.
101 -> 101
Notes:
Traitement Des Nombres Négatifs
pour traiter les nombres négatifs, j'ai inclus une concaténation avec un signe négatif si moins de 0 et d'utiliser la valeur absolue pour tous d'autres travaux.
Méthode de construction: Il a d'abord été divisé en environ 6 colonnes dans excel qui a exécuté les différentes étapes et à la fin j'ai fusionné toutes les étapes dans une formule ci-dessus.