例如,我有一个双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的积分,需要进行哪些调整才能获得所需的结果?
答案 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