C语言 如何将float分为整数和小数部分?

vu8f3i0k  于 2023-05-22  发布在  其他
关注(0)|答案(5)|浏览(177)

我愿意转换精确的操作,为此,我需要一种方法将浮点数分为整数和小数部分。有什么办法吗?

zkure5ic

zkure5ic1#

math.h库中包含一个函数,名为modf使用此函数,您可以做您想要做的事情。

示例:

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

double ftof ()
{
    double floating = 3.40, fractional, integer;

    fractional = modf(floating, &integer);
    printf ("Floating: %g\nInteger: %g\nFractional: %g", floating, integer, fractional); // when using printf, there are no floats

    return fractional;
}

输出:

Floating: 3.40
Integer: 3
Fractional: 0.40

请注意,在大多数情况下使用double比使用float更好,尽管double消耗的内存是float的两倍(4:8字节),因此范围和精度都有所增加。此外,如果您在打印时需要更精确的浮点数输出,您可以尝试printf()指数格式说明符%e,而不是%g,它只使用浮点小数的最短表示形式。

9fkzdhlc

9fkzdhlc2#

另一种使用类型转换的方法。

#include <stdio.h> 
#include <math.h>
void main()
{ 
    float a = 3.4;
    float a_frac = a - (int) a;
    float a_int = a - a_frac;
    printf("Number = %f, Integer = %f, Fraction = %f", a, a_frac, a_int);
}
qlvxas9a

qlvxas9a3#

一个念头闪过我的脑海,用一些逻辑把它们分开:

#include <iostream>

using namespace std;
int main()
    {
    double fr,i,in,num=12.7;
    for(i=0;i<num;i++)
    {
        fr=num-i;
        }
        cout<<"num: "<<num;
cout<<"\nfraction: "<<fr;
in=num-fr;
cout<<"\nInteger: "<<in;
    }

希望这就是你要找的:)

kzmpq1sx

kzmpq1sx4#

当然,使用modf()是将浮点数的整数部分与小数部分分开的最好、更直接的方法。唯一的缺点是如果你想整数部分实际上是一个整数;例如,如果要拆分以秒表示的时间值。使用modf()需要一个中间值来存储整数部分的浮点格式。另一种方法是使用fmod()。下面是一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <math.h>

int main(int argc, char *argv[])
/*
* Convert arguments to double, then split seconds and microseconds.
*/
{
    for (int i = 1; i < argc; ++i)
    {
        double d = atof(argv[i]);
        struct timeval tv;

        tv.tv_sec = trunc(d);
        tv.tv_usec = trunc(fmod(d, 1.0)*1000000.0);

        printf("%g\t-> %ld.%06ld\n", d, tv.tv_sec, tv.tv_usec);
    }
    return 0;
}

输出:

$ ./a.out 123.45678987654321 0.1 0.01 0.001 0.0001 0.00001 0.000001 0.0000001
123.457 -> 123.456789
0.1     -> 0.100000
0.01    -> 0.010000
0.001   -> 0.001000
0.0001  -> 0.000100
1e-05   -> 0.000010
1e-06   -> 0.000001
1e-07   -> 0.000000
xurqigkl

xurqigkl5#

#include <bits/stdc++.h>

using namespace std;

int main()
{
    double n;
    cin>>n;
    double fr = n-((int)n);

    cout<<"int "<<(int) n<<"\n";

    cout<<"fraction "<< fr;

    return 0;
}

相关问题