得到漂浮的长度

时间:2013-08-31 00:43:37

标签: c floating-point content-length

我试图得到一个浮点数的长度,但是它的长度是8.我想知道它有多少位数。为什么说只有8位?

#include <stdio.h>

int main()
{
    double n = 72382.413651;
    int len;

    len = sizeof(n);
    printf("%d\n", len);
}

我需要知道浮点数的长度,因为它有利于制作这样的对数表表。

--------------------------
| 1000000 | 72382.413651 |
--------------------------

3 个答案:

答案 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();
}