Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当小数部分为0时,如何提取C中双精度的整数和小数部分?_C - Fatal编程技术网

当小数部分为0时,如何提取C中双精度的整数和小数部分?

当小数部分为0时,如何提取C中双精度的整数和小数部分?,c,C,例如,我有一个双59.00 我想在一个变量中存储59,在另一个变量中存储0 我试着像这样使用modf: double lat_seconds, intpart, fracpart; lat_seconds = 59.000000; fracpart = modf(lat_seconds, &intpart); 但当我打印出结果时,我得到: printf("intpart=%f\n", intpart); \\ intpart=58.000000 printf("

例如,我有一个双59.00

我想在一个变量中存储59,在另一个变量中存储0

我试着像这样使用modf:

double lat_seconds, intpart, fracpart;  
lat_seconds = 59.000000;     

fracpart = modf(lat_seconds, &intpart);
但当我打印出结果时,我得到:

  printf("intpart=%f\n", intpart); \\ intpart=58.000000
  printf("fracpart=%f\n", fracpart); \\fracpart=1.000000
我假设当小数点等于0时,modf产生的结果为1.00,但为什么我得到的是58.00的整数而不是59.00的整数,需要进行哪些调整才能得到期望的结果

有点有限

ndigits-有多少个小数位数 r-旋转还是不旋转

#include <stdio.h>
#include <math.h>

void split(double number, int *intpart, unsigned *fractional, int ndigits, int r)
{
    long long longnum;
    long mult = 1;

    for(int x = 0; x < ndigits; x++)
    {
        mult *= 10;
    }

    longnum = (long long)(r ? round(number * mult) : number * mult);

    *intpart = longnum / mult;
    *fractional = abs(longnum) % mult;
}


int main(void) {
    double x = 5678.67897;
    int i;
    unsigned f;

    split(x, &i, &f, 3, 1);
    printf("x = %f, i = %d, f = %u\n", x, i, f);
    split(x, &i, &f, 3, 0);
    printf("x = %f, i = %d, f = %u\n", x, i, f);
    return 0;
}

测试自己:

intinterralpart=(int)num;float-decimalPart=num-integralPart
显示一个。传递给
modf
的号码不是59。它略低于59,但在使用有限位数打印时显示为59。然后
modf
将数字正确地分为58和略低于1的数字。当以有限位数打印时,后者显示为1。您是否在实际代码中对
lat_seconds
执行任何算术?如果是这样,那么我上面评论的链接是适用的。@EricPostpischil我很抱歉,目前pm100已经为我解决了这个问题。@TeddyF:如果您将
%f
替换为
%.24f
,会有什么输出?(它使用24位小数打印值。)是否有理由
分数
是整数类型?我想OP想要它,但可能我没有仔细阅读问题。否则我看不出有什么问题。
x = 5678.678970, i = 5678, f = 679
x = 5678.678970, i = 5678, f = 678