漂浮或Char。类型混乱

时间:2013-12-04 13:53:49

标签: c

我有这样的结构:

typedef struct tic {
  char       * close_ts;
  float      * close;
  float      * open;
}

openclose是浮点值(如11.4,33.5等),将从流中复制,但我不需要对它们进行任何计算。我只需要提取它们并写入其他地方。

在这种情况下使用char而不是float会更好吗?

4 个答案:

答案 0 :(得分:2)

我不同意我面前的答案。 如果您不需要对这些数字执行任何计算,并且希望在阅读时保持不变,则应使用字符串。

为什么: 浮点值不精确。如果你读取1.0f并将其存储为浮点数,它可能会存储为0.99999998(不是那些准确的值)。随着数量的增加,它变得更加不精确。如果你想存储大数字,它只会变得更糟。 维基百科上有一篇关于为什么会出现这种情况的好文章 - http://en.wikipedia.org/wiki/Floating_point

如果这些值类似于金钱(它们看起来就像命名那样),即使你需要对它们进行计算,我也建议不要使用浮点数,并建议你使用一些可以进行定点数学运算的库。

答案 1 :(得分:1)

我认为没有理由使用char*

使用float的原因:

  1. sizeof(float) = 4个字节小于sizeof("1.234567f") = 9个字节。
  2. 使用float是很自然的,所以程序会更具可读性。

答案 2 :(得分:1)

如果你想将float存储为float,则不能:

float *open;
//or
float *close;

float open;
//or
float close;

如果您不需要对这些浮点数执行任何操作 - 您也可以将它们存储为数组中的文字字符串,但其长度将取决于您的浮点字面长度等,因此数组有时可能比常规浮点数占用更多空间漂浮在这里应该没问题。

答案 3 :(得分:1)

首先,char *close_tsfloat *closefloat *open是指针。您不应该为它们分配任何内容,而是指定类似变量类型的地址。例如:

float num = 5;
float *pNum = #

在这种情况下,pNum保留num&num)的地址。如果您取消引用pNum*pNum),则会获得num5)的值。

您应该决定使用哪种变量类型,具体取决于它的用途。你会在其中存储一个角色,例如'A'吗?如果是,请使用char。您是否会存储一个带小数部分的数字,例如3.14?如果是,请使用float