我需要在mysql中使用numeric(11,9)类型的字段。我正在使用C api,因此我应该使用哪种数据类型。我用了很长时间,所以给出了这样的结果:
12.123456789至12.123457000
我不想失去精确度。我想我应该使用long double - 但我应该使用什么说明符(%_
)?很长时间它是%f
,但它是多长时间的双倍?
答案 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