java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园
今天在superWaba上看到Convert.toDouble(String str),由于底層問題比較大的數(shù)就出錯,現(xiàn)在自己寫了一個 程序中info()是我加的打印,可以去掉
java中 Convert.toDouble(String str)處理函數(shù)
/**由于底層對該函數(shù)支持不好,自己寫了一個 added by shixianjun
* 對于比較大的數(shù) 也沒有問題 可以對科學計數(shù)法形式的數(shù)進行處理
* @param str
* @return 無效串返回0.0
*/
private double stringTOdouble(String str) {
info("into stringTOdouble==str=="+str);
//re小數(shù)點之前的數(shù),re1小數(shù)點之后的數(shù),re2 E之后的數(shù)
double re=0.0,re1=0.0;
int re2=0;
double index=1.0;
boolean flag=true;//正負標志 true 正 false負
boolean eflag=true;//e之后的指數(shù)正負 true正?? false 負
if(str==null) {
info("out stringTOdouble==re=str==null="+0);
return 0.0;
}
byte point=0;//在小數(shù)點之前0,之后1
byte ebefore=0;//在E之前0,之后1
int leng=str.length();
if(leng<=0) {
info("out stringTOdouble==re=leng<0="+0);
return 0.0;
}
char temp[];//串臨時保存在temp數(shù)組
//判斷是整數(shù)還是負數(shù),對flag進行賦值,并去掉(+ -)符號
if(str.startsWith("+")) {
temp=str.substring(1).toCharArray();
leng--;
}else if(str.startsWith("-")) {
flag=false;
temp=str.substring(1).toCharArray();
leng--;
}else{
temp=str.toCharArray();
};
/**檢查每位數(shù)把小數(shù)點之前的保存在re中,小數(shù)點之后的
* 的保存在re1中,e之后的保存在re2中
*/
for(int i=0;i
if(temp[i]>='0' && temp[i]<='9') {
if(ebefore==0) {
if(point==0) {
re=re*10.0+(temp[i]-48);
}else if(point==1) {
index=index*0.1;
re1=re1+(temp[i]-48)*index;
}
}else if(ebefore==1) {
re2=re2*10+(temp[i]-48);
}
}else if(temp[i]=='.') {
point++;
if(point>1) {//兩個點為無效
info("out stringTOdouble==re=twopoint="+0);
return 0.0;
}
}else if(temp[i]=='e' ||temp[i]=='E') {
ebefore++;
if(ebefore>1) {//兩個E為無效
info("out stringTOdouble==re=two e="+0);
return 0.0;
}
}else if(temp[i]=='+' || temp[i]=='-'){
if(ebefore==1 && temp[i]=='-') {
eflag=false;
}else {//E之前出現(xiàn)了 + -號
info("out stringTOdouble==re=plusbefor e="+0);
return 0.0;
}
}else {
info("out stringTOdouble==re=other char=temp[i]"+temp[i]);
return 0.0;
}
}//end for
if(eflag==false) {
re2=re2*(-1);
}
//??info("out stringTOdouble==re=eee14="+Math.pow(10,-14));
if(flag==false) {
info("out stringTOdouble==re=="+(re+re1)+" "+Math.pow(10,re2*1.0)*(-1.0));
return (re+re1)*Math.pow(10,re2*1.0)*(-1.0);
}else {
info("out stringTOdouble==re=="+(re+re1)+"? "+Math.pow(10,re2*1.0));
return (re+re1)*Math.pow(10,re2*1.0);
}
}
總結
以上是生活随笔為你收集整理的java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是java虚拟机?JVM的简单介绍(
- 下一篇: jvm对于java的意义_谈谈对JVM的