2011-03-25 79 views
0

我需要在mysql中使用numeric(11,9)类型的字段。我正在使用C api,因此我应该使用哪种数据类型。我用长,所以给人造成这样的:哪个c数据类型应该用于十进制数字?

12.123456789到12.123457000

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

回答

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

只要你有小数点后不到9个数字,它会用零来填充。

1

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

0

你应该与scanf%lf,或long double使用doublescanf%llf

1

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

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

相关问题