Как разделить float на целое число и дробную часть?

Я готов к точным операциям, и для этой цели мне нужен способ разделите число float на целое число и дробную часть. Есть ли способ для этого?

3 ответов


есть функция, включенная в 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, который использует только кратчайшее представление плавающей десятичной дроби.


мне пришла в голову мысль разделить их с некоторой логикой:

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

надеюсь, что это было то, что вы искали:) .


еще один способ использования типа cast.

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