最近打算用FLTK做一个计算器程序,然后惊奇的发现,浮点数的读入有些麻烦,于是打算做个小程序试验一下。
读取
#include<iostream>
#include<cctype>
#include<cmath>
using namespace std;
int main()
{
double n = 0;//要输出的数
char ch;//输入的字符
int p = 0;//小数位数
while ((ch = getchar()) != int ('\n'))
{
int m;//把char转换为int的数
double k;//用于调试的数
//如果是数字
if (isdigit(ch))
{
m = ch - int ('0');//转换
//如果正在输入整数
if(p == 0)
{
k = n * 10;
n = k + m;
}
//如果正在输入小数
else
{
k = (1 / pow(10,p)) * m;//要加上的数,10^p的倒数乘上m就是要加上的小数
n += k;
p++;
}
}
//如果输入的是是小数点
else if ((ch == int ('.')))
{
//p大于0说明正在输入小数
if(p > 0)
{
cout << "\n输入错误\n";
break;
}
//否则表示正在输入整数
else
p = 1;
}
//调试用
/*cout << "\nn:" << n
<< "\tch:" << ch
<< "\tp:" << p
<< "\tk:" << k
<< "\tm:" << m
<< endl;*/
}
cout << endl << n;
return 0;
}
删除
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double pi = 3.14159;
int p = 5;
int n;
cout << "删除几位:";
cin >> n;
if (n <= p)
{
long npi = pi * pow(10, p); // 变成整数
npi /= pow(10, n); // 得到商
p -= n;
pi = (1 / pow(10, p)) * npi; // 更新结果
cout << pi;
}
else
cout << "错误";
return 0;
}