atof函数
public class algorithm { public float atof(String s){ float left = 0.0f; float right = 0.0f; boolean positive = true; boolean ePo = true; int start = 0; int size = s.length(); //跳过空格等 while(start < size && (s.charAt(start) == ' ' || s.charAt(start) == '\t')){ start++; } //判断是否有正负符号 if(start < size && s.charAt(start) == '-'){ positive = false; start++; } else if(start < size && s.charAt(start) == '+'){ start++; } //计算小数点左侧 while(start < size && s.charAt(start) >= '0' && s.charAt(start) <= '9'){ left = left*10 + s.charAt(start) - '0'; start++; } //计算小数点右侧 float order = 1.0f; if(start < size && s.charAt(start) == '.'){ start++; while(start < size && s.charAt(start) >= '0' && s.charAt(start) <= '9'){ order = order/10; right = right + (s.charAt(start) - '0')*order; start++; } } //判断是否有科学计数 e int or = 0; if(start < size && s.charAt(start) == 'e'){ start++; //判断科学计数前的正负 if(start < size && s.charAt(start) == '-'){ ePo = false; start++; } else if(start < size && s.charAt(start) == '+'){ start++; } while(start < size && s.charAt(start) >= '0' && s.charAt(start) <= '9'){ or = or*10 + s.charAt(start) - '0'; start++; } } //计算科学计数移动的小数点位数 order = 1.0f; while(or > 0 && ePo){ order = order*10; or--; } while(or > 0 && !ePo){ order = order/10; or--; } //得到结果 float result = (left + right) * order; if(!positive){ return -result; } return result; } }
234.34 -3.34 0.0 0.0 0.0 0.23 0.0 234.32
可以看到,由于是单精度浮点数,23.3e-3的返回值为0.0,当大于7位会四舍五入.
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208218.html原文链接:https://javaforall.net
