2009-04-20 8 views
1

Ich versuche ein Problem mit einer Perl-Anwendung zu debuggen, die einige c-Programme aufruft, um Text zu bearbeiten.Warum 'e0' am Ende einer definierten Konstante in c verwenden?

BATCH_JV_CSH_MAX wird verwendet, um den Maximalwert eines Betragsfelds zu testen. Es zeigt derzeit einen Fehler an, wenn der Betrag über 99,999,999,99 liegt. Es soll Werte bis zu 999.999.999,99 annehmen. Nun, das steht jedenfalls in der Dokumentation.

Hier ist es in der Datei enthalten:

#define PROJ_SZ 6 
#define REF_SZ 9 
#define DESC_SZ 22 
#define TRAN_AMT_MAX 9999999999e0 
#define BATCH_AMT_MAX 9999999999e0 
#define BATCH_JV_CSH_MAX 99999999999e0 
#define BATCH_CNT_MAX 99999 

Ich weiß noch nicht, wie das Programm funktioniert. Es löscht wahrscheinlich einen anderen Wert als eine Zahl und bildet die Zeichen. Ich möchte wissen, was das "e0" am Ende des Betrags bedeutet, bevor ich fortfahre. Ich habe eine Textsuche in einigen Programmierbüchern von Safari gemacht, bevor ich mich dazu entschied, diese Gruppe zu fragen.

Dieser Wert wird so in einer Fehlermeldung gedruckt ‚999999999‘ ist aussagekräftiger als 1E9

Der Wert wie folgt verwendet wird:

/* Batch total amount 1 - debit dollars */ 
/* Check for overflow */ 

if (fabs(get_tot_amt1()) > BATCH_JV_CSH_MAX) 
{ 
    fprintf(stderr, "\n*** Error: Transaction debit amount overflow\n"); 

    fprintf(stderr, "\n***  Maximum expected: %.0f\n", 
     BATCH_JV_CSH_MAX); 

    return (FALSE); 
} 

sprintf(in_batch_sum.batch_debit_amt, "%011.0f", get_tot_amt1()); 

get_tot_amt1() gibt einen Wert tot_amt1 wur berechnet in einem anderen c-Programm. Es ist "statisch doppelt".

Yup, ich habe viel zu tun. Dies ist Teil eines Prozesses, der einen durch Leerzeichen getrennten Datensatz einliest und einen Datensatz mit festem Format ausgibt.

Danke. Cathy

+0

Können Sie bitte den Kontext anzeigen, in dem BATCH_JV_CSH_MAX verwendet wird? Das gleiche Makro kann verschiedene Dinge tun, je nachdem, wie es verwendet wird. –

Antwort

10

Es bedeutet einen Exponenten von 0. Also 5e0 ist 5 x 10^0 == 5 x 1 == 5. Ich denke, die Makros so definiert sind nur die Zahlen einen Schwimmer Typ (als Alternative zur Verwendung von nur 5.0 oder 5f.)

+2

Geringfügige Klarstellung - ohne ein 'f' oder 'L' am Ende (Fall spielt keine Rolle), ist der Typ der Konstante doppelt. –

+2

Eine weitere geringfügige Klarstellung, Sie brauchen nicht wirklich die 0, also sind 5.0, 5. und 5e0 alle Fließkomma-, Doppelkonstanten. –

+0

"als Alternative zur Verwendung nur 5.0 oder 5f" - halb falsch. Wenn 5f verwendet würden, wäre der Typ float statt double. Das Originalplakat benötigt mehr als 10 Dezimalstellen, so dass sie eine doppelte Genauigkeit benötigt. –

0

ist. Es bedeutet "mal zehn zur nullten Leistung", oder mal 1.

2

99999999999e0 ist eine Gleitkommakonstante. das "e0" am Ende bedeutet "* 10^0". Das heißt

1e2 = 100.0 
1e-1 = .1 
1e0 = 1.0 

usw.

0

999999999e0 ist eine Gleitkommadarstellung. 0 ist der Exponent des 10.

9e0 == 9

1

Der Wert 9999999999e0 ist der Weg der C von der wissenschaftlichen Notation von

darstellt
9999999999 * 10^0 

Also, wenn Sie Nummern erlauben bis zu 1.000.000.000,00 möchten, können Sie könnte verwenden

#define BATCH_JV_CSH_MAX 1e9 

Das ist viel einfacher zu lesen, IMO.Aber wenn Sie die Vollversion bevorzugen würden, können Sie verwenden

#define BATCH_JV_CSH_MAX 1000000000e0 
0

Sicher sieht aus wie ein Exponent:

NuMex - NUM x 10^x

Zum Beispiel 12.345e2 = 1234.5

Verwandte Themen