[C++]关于显示小数部分的问题

输入任意小数,然后显示它的小数部分。
但有个地方要注意下,比如输入3.142,那么显示结果为142,而不是0.142。

#include <iostream.h>
#include <math.h>
void main()
{
double a,b;int c,d;
cout<<"请先输入一个小数(小数位不能超过100位):";
cin>>a;
b=a-(int)a;
for(c=1;c<100;c++)
{
b=b*(pow(10,c));
if((int)b==b)
break; //当b为整数时跳出并输出
}
cout<<"这个数的小数部分是:"<<b<<endl;
}

我是这么做的,但结果比较离谱,不知道为什么,求教。

b=a-(int)a; 这一步不太好,十分的不可靠。
具有很高的不确定信,一个double类型的值变成int类型的值——两个长度都不一样。
推荐是使用字符串来保存这样的数字
char num[100];
cin>>num;
int j;
for(int i=0;num[i];i++)if(num[i]=='.'){j=i;break;}
cout<<"这个数的小数部分是:";
for(int end=j+1;num[i];end++)cout<<num[end];

如果你想把它换成int类型的数字也很容易,使用atoi(一个字符数组就就可以了)
cout<<endl;
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-08-24
不能像这样做。因为DOUBLE型是有范围的(到不了小数后第一百位)。
建议你看一下浮点数的存储。因为当小数点前的数值过大时,精度不会很高。

何不换一种思路,用字符串来做
第2个回答  2008-08-24
for(c=1;c<100;c++)
{
b=b*(pow(10,c));
if((int)b==b)
break; //当b为整数时跳出并输出
}

1、if中(int)b强制转换后b一定等于0所以(int)b==b永远不可能相等for循环就每次都是以出C=99输出造成错误
2、pow(x,y)x和y都必须是double型,所以c和10都是整形造成错误
第3个回答  2008-08-24
b=a-(int)a; 语句之后直接
printf("%g", b);

[C++]关于显示小数部分的问题
b=a-(int)a; 这一步不太好,十分的不可靠。具有很高的不确定信,一个double类型的值变成int类型的值——两个长度都不一样。推荐是使用字符串来保存这样的数字 char num[100];cin>>num;int j;for(int i=0;num[i];i++)if(num[i]=='.'){j=i;break;} cout<<"这个数的小数部分是:...

c++中显示小数为什么不全部是小数呢,前面是小数,后面显示整型,求大佬...
在调换过程中double型被转换成int型,导致小数位没有了

c++中怎么输出小数
如果setprecision里的参数小于整数位数,将以指数形式输出。例如: float a=123.666;cout<<setprecision(2)<

C++小数的输出问题
如楼上所说,用setprecision()函数设置小数点的位数,但最大只能输出15位小数;如:include<iostream.h> include<iomanip.h>\/\/需包含这个头文件名哦!void main(){ double a;cin>>a;cout << setprecision(15) << a\/33<<endl;} 假定输入一个5,则输出:0.151515151515152 ...

有关C++小数输出?
这是因为默认的输出是保留6位有效数字。如果你要以n位小数输出,可以这样:1 include<iomanip> 2 int n=8;double d=1.12345678912;\/\/设置成以n位小数输出 cout<<fixed<<setprecision(n);cout<<d<<endl;如:

c++怎么显示小数点后面的有效数字
int main(){ float fn = 3.101;cout << setprecision(3) << setiosflags(ios::showpoint) << fn << endl;\/\/灰色部分,后面补充零,直到满足有效位数,当保留有效数字恰好到个位数为止,后面仍显示小数点 return 0;} 结果:3.10 2.输出时保留小数点后3位 include include \/\/必须包含的头...

C++输出小数的问题百度说问题要详细。。。
第一组控制输出格式,写成cout<<setprecision(2)<<setiosflags(ios::fixed)<<num;第二组不控制输出格式,写成cout<<num;要加头文件 #include<iomanip.h>

关于C++小数输出的问题
你看你前几个 不论是float(20)还是(float)20都是将数字转换为浮点型进行运算的,所以结果也是浮点型,而本身20默认为int类型,所以你第一个和最后一个20和8都是以int类型进行计算的,最后一个的计算顺序是先算出结果,即便最后将答案转换成浮点型也改变不了结果变成2的事实,是一个顺序的问题。

求助! C++中数字的小数点问题
测试代码如下,有问题hi我,注释比较清楚了,需要showpoint确保总是显示小数 include <iostream> include <iomanip> using namespace std;int main()\/\/ 控制小数点右边位数 { double n = 2;cout<< showpoint \/\/总是显示小数点 << setprecision(3) \/\/讲浮点...

c++计算小数(为什么第二个总是输出整数如1.00,2.00……)
因为 c\/k 结果总是整数,系统直接把小数点后的去掉了,比如 6\/5=1,而不是1.2,前边加double也没用,你在定义c,k时改为double类型试试 或者你可以把s=double(c\/k)改为s=c\/(k*1.0)

相似回答
大家正在搜