我愿意转换精确的操作,为此,我需要一种方法将浮点数分为整数和小数部分。有什么办法吗?
zkure5ic1#
math.h库中包含一个函数,名为modf使用此函数,您可以做您想要做的事情。
math.h
示例:
#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,它只使用浮点小数的最短表示形式。
double
float
printf()
%e
%g
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); }
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; }
希望这就是你要找的:)
kzmpq1sx4#
当然,使用modf()是将浮点数的整数部分与小数部分分开的最好、更直接的方法。唯一的缺点是如果你想整数部分实际上是一个整数;例如,如果要拆分以秒表示的时间值。使用modf()需要一个中间值来存储整数部分的浮点格式。另一种方法是使用fmod()。下面是一个例子:
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
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; }
5条答案
按热度按时间zkure5ic1#
math.h
库中包含一个函数,名为modf使用此函数,您可以做您想要做的事情。示例:
输出:
请注意,在大多数情况下使用
double
比使用float
更好,尽管double
消耗的内存是float
的两倍(4:8字节),因此范围和精度都有所增加。此外,如果您在打印时需要更精确的浮点数输出,您可以尝试printf()
指数格式说明符%e
,而不是%g
,它只使用浮点小数的最短表示形式。9fkzdhlc2#
另一种使用类型转换的方法。
qlvxas9a3#
一个念头闪过我的脑海,用一些逻辑把它们分开:
希望这就是你要找的:)
kzmpq1sx4#
当然,使用
modf()
是将浮点数的整数部分与小数部分分开的最好、更直接的方法。唯一的缺点是如果你想整数部分实际上是一个整数;例如,如果要拆分以秒表示的时间值。使用modf()
需要一个中间值来存储整数部分的浮点格式。另一种方法是使用fmod()
。下面是一个例子:输出:
xurqigkl5#