我试图得到一个浮点数的长度,但是它的长度是8.我想知道它有多少位数。为什么说只有8位?
#include <stdio.h>
int main()
{
double n = 72382.413651;
int len;
len = sizeof(n);
printf("%d\n", len);
}
我需要知道浮点数的长度,因为它有利于制作这样的对数表表。
--------------------------
| 1000000 | 72382.413651 |
--------------------------
答案 0 :(得分:3)
sizeof(n)
的使用有点误导,因为n
的值不会得到答案:你总是得到sizeof(double)
的等价物,它似乎是64位或8位您计算机上的字节数。回想一下sizeof
是一个编译时操作;只有参数的类型很重要,但不重要。
浮点表示中的位数通常是无意义的值,因为通常表示是不精确的。只能可靠地确定小数分隔符之前的位数;分隔符后的数字通常被截断为您根据自己的喜好设置的数字。
我需要知道浮点数的长度,因为我试图创建一个这样的对数表表。
不要找出float
的大小,而是强制它们达到特定的长度。在printf
的调用中指定width and precision,以确保所有内容都格式化为相同的长度,并且在表格中看起来很好。
答案 1 :(得分:0)
如果您要查找double
中的位数,您可以使用sprintf
并转换为字符串。然后你可以计算字符串中的字符。
已经讨论过here。
答案 2 :(得分:0)
关于dasblinkenlight和Eric的Springboarding - 您可以做的一个例子就是编辑代码,如下所示:
#include <stdio.h>
#include <stdlib.h>
int main()
{
double n = 72382.413651;
//int len;
//len = sizeof(n);
//printf("%d\n", len);
printf("%5.6f\n", n);
getchar();
}
这将打印该值,使其看起来与声明中的完全相同。
或者说,你必须在不同的位置处理带小数点的数字,但希望格式化在整齐的列中。你可以这样做:
#include <ansi_c.h>
#include <stdio.h>
#include <stdlib.h>
//varible format codes for varying decimal point positions
char *format[]={"%0.9f\n",
"%0.8f\n",
"%0.7f\n",
"%0.6f\n",
"%0.5f\n",
"%0.4f\n",
"%0.3f\n",
"%0.2f\n",
"%0.1f\n",
"%0.0f.\n"};
int main()
{
char val[25];
char dp[]={"."};//will search for position of decimal point in string
//for the purposes of illustration, create some floating point values
double a = .723824136;
double s = 7.23824136;
double d = 72.3824136;
double f = 723.824136;
double g = 7238.24136;
double h = 72382.4136;
double j = 723824.136;
double k = 7238241.36;
double l = 72382413.6;
double m = 723824136.;
//put in string of standard length,
//format output according to decimal position
sprintf(val, "%0.12f", a); printf( format[strcspn(val, dp)], a);
sprintf(val, "%0.12f", s); printf( format[strcspn(val, dp)], s);
sprintf(val, "%0.12f", d); printf( format[strcspn(val, dp)], d);
sprintf(val, "%0.12f", f); printf( format[strcspn(val, dp)], f);
sprintf(val, "%0.12f", g); printf( format[strcspn(val, dp)], g);
sprintf(val, "%0.12f", h); printf( format[strcspn(val, dp)], h);
sprintf(val, "%0.12f", j); printf( format[strcspn(val, dp)], j);
sprintf(val, "%0.12f", k); printf( format[strcspn(val, dp)], k);
sprintf(val, "%0.12f", l); printf( format[strcspn(val, dp)], l);
sprintf(val, "%0.12f", m); printf( format[strcspn(val, dp)], m);
getchar();
}