代码之家  ›  专栏  ›  技术社区  ›  Koerr

如何从int得到浮点

  •  1
  • Koerr  · 技术社区  · 15 年前

    我有一个int:

    int f=1234;//or f=23 f=456 ...
    

    我想得到:

    float result=0.1234; // or 0.23 0.456 ...
    

    不使用:

    float result = parseFloat ("0."+f);
    

    最好的方法是什么?

    谢谢

    4 回复  |  直到 15 年前
        1
  •  10
  •   Mark Elliot    15 年前

    怎么样?

    float result = f/1000.0f;
    

    更一般地说,如果需要为 f 你可以这样做:

    int divisor;
    for(divisor = 1; f / divisor > 0; divisor *= 10);
    float result = (float)f/(float)divisor;
    

    或者更简洁地用对数:

    float result = f / Math.pow(10, Math.floor(Math.log10(f))+1);
    
        2
  •  2
  •   kasgoku    15 年前
    f/Math.pow(10,Integer.toString(f).length());
    

    首先将整数转换为字符串,然后使用string length()方法查找整数的长度。

    • 可能还有更聪明的方法。

    γ γ 编辑 γ γ γ

    f/Math.pow(10,Math.ceil(Math.log10(Math.abs(f)+1)));
    

    处理负片(并使用日志)。

        3
  •  1
  •   Ishtar    15 年前

    我认为你的解决方案比大多数建议的答案更有效…把它也改成负数。

    int f=1234;
    if (f<0)
        result = -1.0f*parseFloat ("0."+(-f));
    else
        result = parseFloat ("0."+f);
    

    仍然失败 Integer.MIN_VALUE 但是要注意精确性的损失。例如:

    int f=2147483647; //gives 
    result == 0.21474837f
    
        4
  •  0
  •   Tony Ennis    15 年前

    我想他是说,“我如何指定一个字面浮点?”

    float f = .1234f;  // Note the trailing f