String 转化成double(不用Double.parseDouble(str))
来源:互联网 发布:python multiply 矩阵 编辑:程序博客网 时间:2024/06/06 09:18
private static double stringTOdouble(String str) {
/**
* noBeforeDot : 小数点前面的数值
* noAfterDot = : 小数点后面的数值
* noAfterE : 指数E后面的数值
* noGtZeroFlag :标识是否大于0
* eNoGtZeroFlag :标识e的指数是否大于0
* posBeforeDot :标识是否在小数点前面,此处用byte是后面要用来做累加计算,多个小数点时返回0.0
* posBeforeE :标识是否在E前面,此处用byte是后面要用来做累加计算,多个E时返回0.0
* 算法基本思想:用一个char型数组来保存string,然后逐个分析各个char,
* 首先:如果开始有正负符号的话,正负符号保留
* 然后分: 0-9之间的字符 用字符的ASII码-48得到对应的数字,然后根据两个标识位(小数点前/后,E前/后)来取得对应的数值。
* 如果是小数点的话:第一次出现正确标识,大于一次时,非合法数字串,返回0.0
* 如果是E/e: 第一个正确标识标示位。 ,大于一个是,返回0.0,
* 再次出现正负号,出现一次时候是E后面的指数,大于一个,返回0.0,
* 其他情况一律返回0.0
*/
double noBeforeDot = 0.0, noAfterDot = 0.0;
int noAfterE = 0;double index = 1.0;
boolean noGtZeroFlag = true;
boolean eNoGtZeroFlag = true;
byte posBeforeDot = 0;
byte posBeforeE = 0;
if (str == null) {
return 0.0;
}
int leng = str.length();
if (leng <= 0) {
return 0.0;
}
char temp[];
if (str.startsWith("+")) {
temp = str.substring(1).toCharArray();
leng--;
} else if (str.startsWith("-")) {
noGtZeroFlag = false;
temp = str.substring(1).toCharArray();
leng--;
} else {
temp = str.toCharArray();
}
;
for (int i = 0; i < leng; i++) {
if (temp[i] >= '0' && temp[i] <= '9') {
if (posBeforeE == 0) {
if (posBeforeDot == 0) {
noBeforeDot = noBeforeDot * 10.0 + (temp[i] - 48);
} else if (posBeforeDot == 1) {
index = index * 0.1;
noAfterDot = noAfterDot + (temp[i] - 48) * index;
}
} else if (posBeforeE == 1) {
noAfterE = noAfterE * 10 + (temp[i] - 48);
}
} else if (temp[i] == '.') {
posBeforeDot++;
if (posBeforeDot > 1) {
return 0.0;
}
} else if (temp[i] == 'e' || temp[i] == 'E') {
posBeforeE++;
if (posBeforeE > 1) {
return 0.0;
}
} else if (temp[i] == '+' || temp[i] == '-') {
if (posBeforeE == 1 && temp[i] == '-') {
eNoGtZeroFlag = false;
} else {
return 0.0;
}
} else {
return 0.0;
}
}// end for
if (eNoGtZeroFlag == false) {
noAfterE = noAfterE * (-1);
}
if (noGtZeroFlag == false) {
return (noBeforeDot + noAfterDot) * Math.pow(10, noAfterE * 1.0) * (-1.0);
} else {
return (noBeforeDot + noAfterDot) * Math.pow(10, noAfterE * 1.0);
}
}
- String 转化成double(不用Double.parseDouble(str))
- struts数据类型转化(Double.parseDouble())(values[0].split)(string centerValues[])(properties)
- 如何把String转化成Double??
- double转化成string string 转化成Csting
- Double.parseDouble()与Double.valueOf()区别
- Double.parseDouble与Double.valueOf区别
- java.lang.Double.parseDouble()方法
- C++double转化为string
- double与string的相互转化(C++)
- double与string的相互转化(C++)
- double与string的相互转化(C++)
- Double.valueOf 与 parseDouble 的区别
- jdk的Double.parseDouble漏洞bug~
- 将string转化为int、double
- stringstream把double转化为string
- #include<sstream> string转化为double
- QString string int double char* 相互转化
- string和double的相互转化
- 面试题总结0002
- ASP.net技巧:DataList、Gridview主从表明细显示
- 在构造StringBuffer对象时,指定合适的capacity
- 那些年读过的好书——C程序设计语言
- 初次将一个C文件 拆开写 遇到的 蛋疼问题"multiple definition of" 错误
- String 转化成double(不用Double.parseDouble(str))
- Android数据存储之SQLite
- 设备驱动基础1:设备模型之总线,驱动,设备
- System Volume Information Win7删除(图解)
- linux 初学
- 队列基本操作的实现
- loadrunner——常见函数
- 编程之美——小飞的电梯调度算法
- 第八周任务三