为啥在 c 中定义的常量末尾使用'e0'?

Posted

技术标签:

【中文标题】为啥在 c 中定义的常量末尾使用\'e0\'?【英文标题】:Why use 'e0' at the end of a defined constant in c?为什么在 c 中定义的常量末尾使用'e0'? 【发布时间】:2009-04-20 19:10:06 【问题描述】:

我正在尝试调试一个调用某些 c 程序进行文本编辑的 perl 应用程序的问题。

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 程序中计算。它是“静态双”。

是的,我有很多工作要做。这是读取以空格分隔的记录并写出固定格式记录的过程的一部分。

谢谢。 凯茜

【问题讨论】:

您能否说明使用 BATCH_JV_CSH_MAX 的上下文?同一个宏可以做不同的事情,这取决于它的使用方式。 【参考方案1】:

它表示 0 的指数。所以5e05 x 10^0 == 5 x 1 == 5。我认为宏的定义只是为了给数字一个浮点类型(作为仅使用5.05f 的替代方法。)

【讨论】:

小说明 - 最后没有“f”或“L”(大小写无关紧要),常量的类型是双精度。 另一个小说明,你实际上并不需要 0,所以 5.0、5. 和 5e0 都是浮点、双精度常量。 “作为仅使用 5.0 或 5f 的替代方案”——错了一半。如果使用 5f,那么类型将是 float 而不是 double。原始海报需要精确到 10 位以上的十进制数字,因此她需要双精度。【参考方案2】:

它是scientific notation

【讨论】:

【参考方案3】:

99999999999e0 是一个浮点常数。末尾的“e0”表示“*10^0”。那是

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

等等

【讨论】:

【参考方案4】:

值9999999999e0是C表示科学记数法的方式

9999999999 * 10^0

因此,如果您想允许最大为 1,000,000,000.00 的数字,您可以使用

#define BATCH_JV_CSH_MAX 1e9

这更容易阅读,IMO。但如果你更喜欢完整版,你可以使用

#define BATCH_JV_CSH_MAX 1000000000e0

【讨论】:

【参考方案5】:

这是科学记数法。它的意思是“乘以十的零次方”,或乘以 1。

【讨论】:

【参考方案6】:

http://en.wikipedia.org/wiki/Scientific_notation#E_notation

【讨论】:

【参考方案7】:

999999999e0 是浮点表示。 0 是 10 的指数。

9e0 == 9

【讨论】:

【参考方案8】:

当然看起来像一个指数:

NUMex - NUM x 10 ^x

例如,12.345e2 = 1234.5

【讨论】:

以上是关于为啥在 c 中定义的常量末尾使用'e0'?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能从 Golang 正确读取 C 常量?

C语言#define预处理详解

转换为镶木地板的 csv 文件将“e0”添加到值的末尾

为啥在 C for 循环的条件中使用表达式而不是常量?

VS2010 编写c语言变量为啥要初始化?

为啥我在尝试将它与目标 c 一起使用时会收到错误消息,即我的 json 末尾有垃圾?