为啥在 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 的指数。所以5e0
是5 x 10^0 == 5 x 1 == 5
。我认为宏的定义只是为了给数字一个浮点类型(作为仅使用5.0
或5f
的替代方法。)
【讨论】:
小说明 - 最后没有“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'?的主要内容,如果未能解决你的问题,请参考以下文章