java 实现atof函数

java 实现atof函数atof 函数将字符串转换为浮点数 此函数规则如下 它会扫描参数 str 字符串 跳过前面的空白字符 例如空格 tab 缩进等 可以通过 isspace 函数来检测 直到遇上数字或正负符号才开始做转换 而再遇到非数字或字符串结束时 0 才结束转换 并将结果返回 参数 str 字符串可包含正负号 小数点或 E e 来表示指数部分 如 123 456 或 123e 2 返回值 返回转换后的浮点数

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

(0)
上一篇 2026年3月19日 下午12:04
下一篇 2026年3月19日 下午12:05


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号