2009-04-20 99 views
1

我試圖調用一個perl應用程序調用一些c程序來做文本編輯的問題。爲什麼在c中定義常量的末尾使用'e0'?

BATCH_JV_CSH_MAX用於測試金額字段的最大值。如果金額超過99,999,999.99,它現在表明有錯誤。是應該接受高達999,999,999.99的值。那麼,無論如何,這就是文檔中所說的。

這是在包含文件:

#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 

我不知道該程序還如何工作的。它可能會去除數字以外的任何值並連接字符。我想在繼續之前知道金額末尾的'e0'是什麼意思。在我決定詢問這個小組之前,我在Safari的幾個c編程書籍中進行了文本搜索。

該值在一個錯誤信息打印出來,以便「999999999」小於1E9

值用於這樣更有意義:

/* 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()得到的值tot_amt1這一直在另一個c程序中計算。這是「靜態雙重」。是的,我有很多工作要做。這是讀取空格分隔記錄並寫出固定格式記錄的過程的一部分。

謝謝。 Cathy

+0

您能否顯示BATCH_JV_CSH_MAX被使用的上下文?同一個宏可以做不同的事情,這取決於它的使用方式。 – 2009-04-20 19:51:35

回答

10

這意味着指數爲0.所以5e05 x 10^0 == 5 x 1 == 5。我認爲,宏這樣的定義只是爲了給數字浮點類型(如替代使用剛剛5.05f。)

+2

小澄清 - 最後沒有'f'或'L'(大小寫無關緊要),常量的類型是雙倍。 – 2009-04-20 19:25:54

+2

另一個小的澄清,你實際上並不需要0,所以5.0,5和5e0都是浮點型,雙常量。 – 2009-04-20 19:37:17

+0

「作爲替代使用5.0或5f」 - 一半錯了。如果使用5f,那麼類型將是float而不是double。原始海報需要10位以上的精度,所以她需要雙精度。 – 2009-04-23 00:29:34

0

這是科學記數法。這意味着「時間十到零」,或時間1.

2

99999999999e0是一個浮點常量。末尾的「e0」表示「* 10^0」。也就是說

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

0

999999999e0是浮點表示。 0的指數10

9e0 == 9

1

值9999999999e0爲代表的

9999999999 * 10^0 

所以科學記數法的C'S方式,如果你想允許人數達到1,000,000,000.00,你可以使用

#define BATCH_JV_CSH_MAX 1e9 

這是更容易閱讀,國際海事組織。但是,如果你願意的完整版,您可以使用

#define BATCH_JV_CSH_MAX 1000000000e0 
0

當然看起來像一個指數:

NUMex - NUM×10^X

例如,12.345e2 = 1234.5

相關問題