Зачем использовать 'e0' в конце определенной константы в c? - PullRequest
1 голос
/ 20 апреля 2009

Я пытаюсь отладить проблему с приложением perl, которое вызывает некоторые программы на 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

Я пока не знаю, как работает программа. Вероятно, он удаляет любое значение, кроме числа, и объединяет символы. Я хочу знать, что означает «е0» в конце суммы, прежде чем я продолжу. Я провел поиск текста в нескольких книгах по программированию в 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

Ответы [ 8 ]

10 голосов
/ 20 апреля 2009

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

2 голосов
/ 20 апреля 2009

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

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

и т.д.

2 голосов
/ 20 апреля 2009
1 голос
/ 20 апреля 2009

Значение 9999999999e0 является способом С представления научной нотации

9999999999 * 10^0

Так что, если вы хотите разрешить номера до 1 000 000 000,00, вы можете использовать

#define BATCH_JV_CSH_MAX 1e9

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

#define BATCH_JV_CSH_MAX 1000000000e0
0 голосов
/ 20 апреля 2009

Конечно, выглядит как показатель степени:

NUMex - NUM x 10 ^ x

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

0 голосов
/ 20 апреля 2009

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

9e0 == 9

0 голосов
/ 20 апреля 2009
0 голосов
/ 20 апреля 2009

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

...