十进制数应该使用哪种c数据类型?

时间:2011-03-25 08:23:34

标签: mysql c numbers

我需要在mysql中使用numeric(11,9)类型的字段。我正在使用C api,因此我应该使用哪种数据类型。我用了很长时间,所以给出了这样的结果:

  

12.123456789至12.123457000

我不想失去精确度。我想我应该使用long double - 但我应该使用什么说明符(%_)?很长时间它是%f,但它是多长时间的双倍?

4 个答案:

答案 0 :(得分:2)

long double d = 12.123456789;
printf ("%.9lf", d);

只要小数点后小于9位,就会用零填充。

答案 1 :(得分:1)

这取决于;如果你真的想要确切,C字符串(char *)会给你这个。根据您自己的定义struct使用long并存储“缩放系数”,可能会让您更好地进行计算。并且double会为您提供roughly 15个数字,但使用double进行计算可能会在低位中累积太多“噪音”,从而破坏可能需要精确的数据。

答案 2 :(得分:1)

long double的说明符是“%Lf”。

但即使是double或long double(在许多平台上都是相同的)也不会给出完全相同的表示,因为12.123456789的二进制表示是无限分数。 如果限制为纯C,则可以使用基于64位int类型的固定点。

答案 3 :(得分:0)

您应该double使用scanf说明符%lf,或long double使用scanf说明符%llf