【问题标题】: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 的上下文?同一个宏可以做不同的事情,这取决于它的使用方式。

标签: c maintenance scientific-notation


【解决方案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】:

【讨论】:

    【解决方案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】:
          【解决方案7】:

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

          9e0 == 9

          【讨论】:

            【解决方案8】:

            当然看起来像一个指数:

            NUMex - NUM x 10 ^x

            例如,12.345e2 = 1234.5

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-02-07
              • 1970-01-01
              • 1970-01-01
              • 2012-05-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多