java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园
今天在superWaba上看到Convert.toDouble(String str),由于底層問(wèn)題比較大的數(shù)就出錯(cuò),現(xiàn)在自己寫了一個(gè) 程序中info()是我加的打印,可以去掉
java中 Convert.toDouble(String str)處理函數(shù)
/**由于底層對(duì)該函數(shù)支持不好,自己寫了一個(gè) added by shixianjun
* 對(duì)于比較大的數(shù) 也沒(méi)有問(wèn)題 可以對(duì)科學(xué)計(jì)數(shù)法形式的數(shù)進(jìn)行處理
* @param str
* @return 無(wú)效串返回0.0
*/
private double stringTOdouble(String str) {
info("into stringTOdouble==str=="+str);
//re小數(shù)點(diǎn)之前的數(shù),re1小數(shù)點(diǎn)之后的數(shù),re2 E之后的數(shù)
double re=0.0,re1=0.0;
int re2=0;
double index=1.0;
boolean flag=true;//正負(fù)標(biāo)志 true 正 false負(fù)
boolean eflag=true;//e之后的指數(shù)正負(fù) true正?? false 負(fù)
if(str==null) {
info("out stringTOdouble==re=str==null="+0);
return 0.0;
}
byte point=0;//在小數(shù)點(diǎn)之前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[];//串臨時(shí)保存在temp數(shù)組
//判斷是整數(shù)還是負(fù)數(shù),對(duì)flag進(jìn)行賦值,并去掉(+ -)符號(hào)
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ù)點(diǎn)之前的保存在re中,小數(shù)點(diǎn)之后的
* 的保存在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) {//兩個(gè)點(diǎn)為無(wú)效
info("out stringTOdouble==re=twopoint="+0);
return 0.0;
}
}else if(temp[i]=='e' ||temp[i]=='E') {
ebefore++;
if(ebefore>1) {//兩個(gè)E為無(wú)效
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)了 + -號(hào)
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);
}
}
總結(jié)
以上是生活随笔為你收集整理的java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是java虚拟机?JVM的简单介绍(
- 下一篇: jvm对于java的意义_谈谈对JVM的