2009-04-20 2 views
1

Я пытаюсь отладить проблему с помощью приложения perl, которое вызывает некоторые c-программы для редактирования текста.Зачем использовать 'e0' в конце определенной константы в c?

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, прежде чем я решил спросить эту группу.

Это значение выводится в сообщении об ошибке, так «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? Тот же макрос может делать разные вещи, в зависимости от того, как он используется. –

ответ

10

Показатель ценности: 0. То есть 5e0 - 5 x 10^0 == 5 x 1 == 5. Я думаю, что макросы определены так просто, чтобы дать число типа с плавающей точкой (в качестве альтернативы использованию только 5.0 или 5f.)

+2

Незначительное разъяснение - без конца «f» или «L» в конце (случай не имеет значения), тип константы двойной. –

+2

Еще одно незначительное разъяснение, на самом деле вам не нужно 0, поэтому 5.0, 5. и 5e0 - это двойные константы с плавающей запятой. –

+0

«как альтернатива использованию всего 5,0 или 5 ф» - наполовину неправильный. Если бы использовались 5f, тогда тип был бы float вместо double. Оригинальный плакат нуждается в точности до десяти десятичных цифр, поэтому ей нужна двойная точность. –

0

Это научное обозначение. Это означает «раз десять до нулевой силы» или раз 1.

2

99999999999e0 - постоянная с плавающей запятой. «e0» в конце означает «* 10^0». Это

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

т.д.

0

999999999e0 является представление с плавающей запятой. 0 является показателем 10.

9e0 == 9

1

Значение 9999999999e0 это путь C о представляющих научную нотацию

9999999999 * 10^0 

Итак, если вы хотите, чтобы числа до 1,000,000,000.00, вы мог бы использовать

#define BATCH_JV_CSH_MAX 1e9 

Который намного легче читать, ИМО.Но если вы предпочитаете полную версию, вы можете использовать

#define BATCH_JV_CSH_MAX 1000000000e0 
0

Конечно выглядит экспоненте:

NUMex - NUM х 10^х

Например, 12.345e2 = 1234,5

Смежные вопросы