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

时间:2018-07-24 20:24:01

标签: 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("fracpart=%f\n", fracpart); \\fracpart=1.000000

我假设当小数等于0时,modf产生的结果为1.00,但是为什么我得到的是58.00而不是59.00的积分,需要进行哪些调整才能获得所需的结果?

1 个答案:

答案 0 :(得分:-1)

有点限制。

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;
}

和结果:

x = 5678.678970, i = 5678, f = 679
x = 5678.678970, i = 5678, f = 678

测试自己:https://ideone.com/XMYdGO