前段时间面试时被问到这个问题,但我无法弄清楚。我不被允许立即转换整个事情,所以我的下一个想法是只进行字符串转换直到这一点,但采访我的人告诉我他想做这样的事情:
1 = 1
12 = 1 * 10 + 2
123 = 12 * 10 + 3
1234 = 123 * 10 + 4
输入为convert "1234.567" to a float ie. 1234.567
老实说,我不知道他打算如何做到这一点,而且我无法生成足够好的代码来向你们展示我所拥有的只是循环解析每个字符:
for(int i = 0; i < str.length(); i++){
if(!str.charAt(i).equals(".")){
fp = Float.parseFloat("" + str.charAt(i));
最佳答案
类似这样的东西(注意:没有错误检查):
public float parseFloatFromString(final String input)
{
boolean seenDot = false;
float divisor = 1.0f;
char c;
float ret = 0.0f;
for (int i = 0; i < input.length(); i++) {
c = input.charAt(i);
if (c == '.') {
seenDot = true;
continue;
}
ret *= 10.0f;
ret += (float) (c - '0');
if (seenDot)
divisor *= 10.0f;
}
ret /= divisor;
return ret;
}
当然,您受到 float
可以表示为十进制数的限制 - 最终,限制不大。尤其是在这种情况下,你一直在进行乘法/加法,我们不讨论最后的除法(如果除数不是 1)。
关于上述内容的有趣说明:事实上,这似乎可能在不同平台上产生不同的结果...现代平台上的现代 JVM 可能使用内部的、更高精度的浮点中间表示。如果您希望到处都有相同的结果,则必须将修饰符 strictfp
添加到方法声明中:
public strictfp float parseFloatFromString(final String input)
更多详情here .
关于java - 如何使用Java将字符串逐字符转换为浮点型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22030021/