在c ++ float中使用小数点前后的值吗?

问题描述

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"变为123456/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;