如何将float分成整数和小数部分?

时间:2014-06-02 11:52:29

标签: c floating-point

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

4 个答案:

答案 0 :(得分:20)

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的{​​{1}} 浮动小数的最短表示。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我想到了一个想法,用一些逻辑将它们分开:

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

希望这就是你在寻找:)。

答案 3 :(得分:0)

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