#include<iostream>
#include<string>
#include<vector>
#include<math.h>
#include<cmath>
#include<algorithm>
using namespace std;
double getnum(string str){
double num1=0,num2=0;
int p1=0,p2,f=1;
if(str[p1]=='-')f=-1,p1++;
for(p1;p1<str.size();p1++){
if(str[p1]=='.')break;
num1=num1*10+str[p1]-'0';
}
for(p2=p1+1;p2<str.size();p2++){
num2=num2*10+str[p2]-'0';
}
for(int i=1;i<=(int)str.size()-p1-1+(p1==-1);i++){
num2/=10;
}
printf("num1=%lf num2=%lf\n",num1,num2);
double ans=num1+num2;
//if(f==-1)ans=-ans;
return ans;
}
string getstring(string str,int l,int r){
string ans;
for(int i=l;i<=r;i++)ans+=str[i];
return ans;
}
double deal(string str){
int i=0,j=0,k=0;
bool flag=true;
for(i=0;i<str.size();i++){
if(str[i]=='-')continue;
if(str[i]>'9'||str[i]<'0')flag=false;
}
cout<<"flag="<<flag<<'\n';
if(flag)return getnum(str);
string type;
i=0;
while('a'<=str[i]&&'z'>=str[i]){
type+=str[i];
i++;
}
int le=0,ri=0;
vector<int>vec;
vec.push_back(0);
for(i=0;i<str.length();i++){
if(str[i]=='(')le++;
if(str[i]==')')ri++;
if(str[i]==','&&le==ri+1){
vec.push_back(i);
}
}
vec.push_back(str.size()-1);
if(type=="add"){
cout<<"4-"<<vec[1]-1<<" "<<vec[1]+1<<"-"<<vec[2]-1<<endl;
return deal(getstring(str,4,vec[1]-1))+deal(getstring(str,vec[1]+1,vec[2]-1));
}
if(type=="sub"){
return deal(getstring(str,4,vec[1]-1))-deal(getstring(str,vec[1]+1,vec[2]-1));
}
if(type=="time"){
return deal(getstring(str,4,vec[1]-1))*deal(getstring(str,vec[1]+1,vec[2]-1));
}
if(type=="div"){
return deal(getstring(str,4,vec[1]-1))/deal(getstring(str,vec[1]+1,vec[2]-1));
}
if(type=="pow"){
return pow(deal(getstring(str,4,vec[1]-1)),deal(getstring(str,vec[1]+1,vec[2]-1)));
}
}
int main(){
cout<<getnum("114514.19");
// cout<<fixed<<deal("114514");
}
输出结果
num1=114514.000000 num2=0.190000
114514
ans=num1+num2 然后 ans 变整数了,ans 也是 double 型啊