问题描述
double f;
cin >> f;
cout << f << endl;
int n1 = f;
int diff = f - n1;
cout << diff << endl;
我想在单独的int小数点之前和之后的数字。 (以double f = 101101.11001为例,我将diff作为零而不是数字。)我刚刚开始学习C ++。需要一些指导。
解决方法
OP:我希望小数点前后的数字分别位于
int
中。
避免使用int n1 = f;
,因为它没有double
的范围。 int
不能在不缩放的情况下对分数进行编码。
研究modf()
,将double
分为整数和小数部分。
double modf(double value,double *iptr);
modf
函数将参数值分为整数和小数部分,每个部分的类型和符号均与参数相同。它们将整数部分(以浮点格式)存储在iptr
所指向的对象中。
#include <cmath>
double f;
cin >> f;
cout << f << endl;
double whole;
double frac = modf(f,&whole);
cout << whole << endl;
cout << frac << endl;
如果代码仍然想采用int
方法。读取为字符串并解析,注意'.'
之后的字符数。然后按该计数缩放分数,使输入"123.00456"
变为123
和456/100000
固定为十进制数据类型以获取运算结果,可以使用浮点数或双精度数,没关系。上面代码中的错误是您使用int diff作为结果,请记住,int数据类型会将所有内容本身都转换为整数,而您希望将其转换为十进制。
double f;
cin >> f;
int n1 = f;
double diff = f - n1;
float diff2 = f - n1;
cout << "Using double : " << diff << endl
<< "Using float : " << diff2 << endl;