java - 如何使用Java将字符串逐字符转换为浮点型?

标签 java string casting character floating-point-conversion

前段时间面试时被问到这个问题,但我无法弄清楚。我不被允许立即转换整个事情,所以我的下一个想法是只进行字符串转换直到这一点,但采访我的人告诉我他想做这样的事情:

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/

相关文章:

java - 在 Java 中向抽象基类添加成员的影响

java - 检查数组中每个元素的开头

java - 将时间戳字符串转换为唯一主键

java - 不区分大小写的映射键 Java

c - Visual Studio : Callback function problem (__cdecl *)

java - 如果应用程序中有多个版本的 jar,如何查找 Jvm 正在使用哪个版本

java - 尝试删除后临时文件保留在 linux 中

java - 使用 gson 解析 JSON 错误

java - 从 arrayList 转换为 Buffer

c++ - 仅调用派生类的析构函数