Skip to content

Commit 52558bd

Browse files
Add files via upload
1 parent c4ea73d commit 52558bd

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

Miscellaneous/atoif_func.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include<iostream>
2+
#include<iomanip>
3+
using namespace std;
4+
5+
template<unsigned long long n>
6+
long double atoif(const char (&num)[n],bool space_flag=false){//i.e. converts string to float
7+
if (n==-1||!n)
8+
return 0;
9+
short sign=1,i=0; int integer_part=0; bool fraction_flag=false;
10+
if (num[i]=='-'){// Take care of +/- sign
11+
++i;
12+
sign=-1;
13+
}
14+
else if(num[i]=='+')
15+
++i;
16+
while(i<n-1){
17+
if(space_flag&&num[i]==' ')
18+
break;
19+
if (num[i]>='0'&&num[i]<='9')
20+
integer_part=integer_part*10+(num[i]-'0');
21+
else if(num[i]=='.'){
22+
fraction_flag=true;
23+
i++;
24+
break;
25+
}
26+
++i;
27+
}
28+
long double fraction_part=0;
29+
if (fraction_flag){
30+
long double exponent=0.1;
31+
while (i<n-1){
32+
if (num[i]<'0'||num[i]>'9')
33+
break;
34+
fraction_part+=exponent*(num[i]-'0');
35+
exponent*=0.1;
36+
++i;
37+
}
38+
}
39+
return sign*integer_part+fraction_part;
40+
}
41+
42+
int main(){
43+
cout<<setprecision(12)<<atoif("51224.765432");
44+
return 0;
45+
}

0 commit comments

Comments
 (0)