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?

7
demandé sur Veridian 2013-12-18 02:09:38

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.

4
répondu sancho.s 2013-12-18 18:57:41

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

3
répondu aberg 2016-01-24 05:46:50

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.

Results from Wikipedia examples

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.

3
répondu Sisyphus 2017-01-30 00:37:26

C'est une vieille question, mais j'ai modifié sancho.s's ' VBA code de sorte que c'est une fonction qui prend deux arguments: 1) le nombre que vous voulez afficher avec des SIG figs appropriés (