十进制数应该使用哪种 C 数据类型?
我需要在 mysql 中使用 numeric(11,9) 类型的字段。我正在使用 C api,所以我应该使用哪种数据类型。我用了很长时间,所以它给出了这样的结果:
12.123456789 至 12.123457000
我不想失去精度。我想我应该使用 long double - 但是我应该使用什么说明符(%_
)? long 是 %f
,但是 long double 是什么呢?
I need to use a field of type numeric(11,9) in mysql. I'm using C api so which data type I should use. I used long so it gives result like these:
12.123456789 to 12.123457000
I don't want to lose precision. I think I should use long double - but what specifier (%_
) should I use? For long it's %f
, but what it's for long double?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您应该将
double
与scanf
说明符%lf
一起使用,或将long double
与scanf
一起使用代码> 说明符%llf
You should use
double
with thescanf
specifier%lf
, orlong double
with thescanf
specifier%llf
当小数点后的位数少于 9 位时,就会用零填充。
whenever you have less than 9 digits after the decimal, it will be filled with zeroes.
这确实取决于;如果你真的想要精确,C 字符串 (
char *
) 就能满足你的需求。您自己定义的struct
,使用long
并存储“缩放因子”,可能会让您更好地进行计算。double
为您提供了大约 15 位数字可供使用,但是使用 double 进行计算可能会在低位中积累过多的“噪声”,从而破坏可能需要精确的数据。It really depends; if you really want to be exact, a C string (
char *
) would give you that. Astruct
of your own definition, using along
and storing a 'scaling factor', would probably let you do calculations better. Anddouble
gives you roughly 15 digits to work with, but computation withdouble
may accumulate too much 'noise' into the low bits, wrecking data that might need to be exact.long double 的说明符是“%Lf”。
但即使是 double 或 long double(在许多平台上都相同)也不会给出完全相同的表示形式,因为 12.123456789 的二进制表示形式是无限分数。
如果您仅限于纯 C,则可以使用基于 64 位 int 类型的定点。
The specifier for long double is "%Lf".
But even double or long double (which are the same on many platforms) won't give you exact the same representation, because the binary representation of 12.123456789 is an infinite fraction.
If you are restricted to pure C you can use fixed point based on a 64 bit int type.