【问题标题】:How to separate float into an integer and a fractional part?如何将浮点数分成整数和小数部分?
【发布时间】:2014-06-02 11:52:29
【问题描述】:

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

【问题讨论】:

标签: c floating-point


【解决方案1】:

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 仅使用 浮点小数的最短表示。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 负数?
    【解决方案3】:

    一个想法掠过我的脑海,用某种逻辑将它们分开:

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

    希望这就是您要搜索的内容:)。

    【讨论】:

      【解决方案4】:
      #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;
      }
      

      【讨论】:

      • 虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。在解释代码时,您也可能会以赞成票的形式从用户那里获得积极的反馈。
      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多