C++中如何判断一个小数有几位

小白一个,想做一个MFC计算器,例如,我输入一个5+3,两个输入和一个输出的变量是double型,比如精确到小数点后6位,那么输出的时候就成了8.000000,但我想输出8,这个当结果是整数时可以用一个判断来做到:
if (a[0]-int(a[0])==0)
{
m_strResult.Format("%d", int(a[0]));
}
但如果输入1/4这种,结果是0.25,正常输出就变成了了0.250000,但我想要输出0.25,我想了一个for循环判断小数非零的位数加switch来解决,但调试时发现只要结果是小数,不管怎么样,最后的输出都是输出小数点后五位,m_strResult是MFC编辑框的变量,CString型

else
{
m_strResult1.Format("%lf", a[0] - int(a[0]));
for (int i = m_strResult1.GetLength(); i >1; i--)
{
if (m_strResult1.GetAt(i) != 0)
break;
n--;
}
switch (n)
{
case 1:
m_strResult.Format("%.1lf", a[0]);
break;
case 2:
m_strResult.Format("%.2lf", a[0]);
break;
case 3:
m_strResult.Format("%.3lf", a[0]);
break;
case 4:
m_strResult.Format("%.4lf", a[0]);
break;
case 5:
m_strResult.Format("%.5lf", a[0]);
break;
case 6:
m_strResult.Format("%.6lf", a[0]);
break;
default:
break;
}
}

读入字符串,在用一个for循环,如果发现有小数点了,将标志位 = 1,然后,如果发现有数字了,判断标志位是否为1,如果是,即已经到小数点后了,计数器+1,最后输出计数器的值即可
#include <stdio.h>
#include <string.h>

int main(){
int i,flag = 0,wei = 0;
char s[500];
scanf("%s",s); //将浮点数按字符串处理
for(i = 0; i < strlen(s); i++){
if(s[i] == '.') flag = 1;
else if(flag == 1) wei++;
}
printf("%d\n",wei);

return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-07-11
利用整数的截断效果,将数据小数部分单取出来,乘以10后取整,与原数比较,若不等,则判断大于小数点后1位,依此计算直到相等为止。
在取整时进行小数点后1位四舍五入可部分防止二进制浮点数与真实数据间的舍入误差问题。
第2个回答  2019-07-10
比如 float m = 22.890; 只需要判断 if ( m - (int) m == 0) 即可。//减去整数部分本回答被网友采纳
第3个回答  2019-07-11
将数字转化成字符串,写一个for循环,在遇到小数点之后,递增计数器追答

你也可以判断字符串的0后面有没有其他的数字,有的话接上,没有的话删掉

不好意思,发错了

给你些提示

运行结果

对了,strtok的参数必须是char*,你得用
char* c=new char[99];
strcpy(c,);

相似回答