【发布时间】:2014-06-02 11:52:29
【问题描述】:
我愿意进行精确的操作,为此我需要一种方法 将浮点数分成整数和小数部分。 有什么办法吗?
【问题讨论】:
-
@Sneftel 您发现的“重复”是关于在“[an] integer”中获取小数部分,这与在与原始值相同的浮点类型中获取小数部分不同,并且考虑到
double的小数部分可以有数百个(十进制)数字,这是一个不切实际的命题。
标签: c floating-point
我愿意进行精确的操作,为此我需要一种方法 将浮点数分成整数和小数部分。 有什么办法吗?
【问题讨论】:
double 的小数部分可以有数百个(十进制)数字,这是一个不切实际的命题。
标签: c floating-point
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 <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);
}
【讨论】:
一个想法掠过我的脑海,用某种逻辑将它们分开:
#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;
}
希望这就是您要搜索的内容:)。
【讨论】:
#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;
}
【讨论】: