我需要在mysql中使用numeric(11,9)类型的字段。我正在使用C api,因此我应该使用哪种数据类型。我用长,所以给人造成这样的:哪个c数据类型应该用于十进制数字?
12.123456789到12.123457000
我不想失去精度。我想我应该使用长双 - 但我应该使用什么说明符(%_
)?很长一段时间,它是%f
,但是它的长双倍?
我需要在mysql中使用numeric(11,9)类型的字段。我正在使用C api,因此我应该使用哪种数据类型。我用长,所以给人造成这样的:哪个c数据类型应该用于十进制数字?
12.123456789到12.123457000
我不想失去精度。我想我应该使用长双 - 但我应该使用什么说明符(%_
)?很长一段时间,它是%f
,但是它的长双倍?
long double d = 12.123456789;
printf ("%.9lf", d);
只要你有小数点后不到9个数字,它会用零来填充。
这真的取决于;如果你真的想要确切的话,一个C字符串(char *
)会给你。您自己定义的struct
,使用long
并存储“缩放因子”,可能会让您更好地进行计算。 double
为您提供roughly 15数字,但double
的计算可能会在低位中累积过多的“噪音”,破坏可能需要精确的数据。
你应该与scanf
符%lf
,或long double
使用double
与scanf
符%llf
long double的说明符是“%Lf”。
但即使是双倍或长双倍(这在许多平台上都是相同的)不会给你完全相同的表示形式,因为12.123456789的二进制表示形式是无限分数。 如果仅限于纯C,则可以使用基于64位int类型的定点。