java - 在Java中有效地将整数放在小数点后面

标签 java floating-point

我有任何无符号long值。我想做的就是将其放在双点(以十进制表示形式)之后,如下所示:

myLong = 1024
dotLong = 0.1024

我可以根据我在编写扫描仪时扫描的数字量来完成此操作。

private long scanDecDigits()
{
    int digIndex = 0;
    char ch;

    while (input.remains())
    {
        ch = input.get();

        if (!AS3Char.isDecDigit(ch))
            break;

        // Push up to 10 digits; ignore rest.
        if (i < 10)
            numDigits[digIndex++] = ch - '0';
    }

    decBase = Math.pow(10, digIndex);

    long sub = decBase;
    long value = 0;

    for (digIndex = 0; sub != 0; sub /= 10)
        value += numDigits[digIndex++] * sub;

    return value;
}

或者,这也有效:

public class Main
{
    public static void main(String[] args)
    {
        System.out.println(putInDecimal(255));
    }

    public static double putInDecimal(long lv)
    {
        return ((double) lv) / ((double) tenPow(lv));
    }

    public static long tenPow(long lv)
    {
        return (lv < 10)  ? 10 :
               (lv < 100) ? 100 :
               (lv < 1e3) ? (long) 1e3 :
               (lv < 1e4) ? (long) 1e4 :
               (lv < 1e5) ? (long) 1e5 :
               (lv < 1e6) ? (long) 1e6 :
               (lv < 1e7) ? (long) 1e7 :
               (lv < 1e8) ? (long) 1e8 :
                            (long) 1e9;
    }
}

提示。

最佳答案

最简单、最清晰的解决方案是(如前所述):

return Double.parseDouble("0."+lv);

更多数学解决方案:

return lv / Math.pow(10, Math.ceil(Math.log10(lv + 1)));

两者都只适用于非负值。如果您需要管理负数,这应该可行:

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

关于java - 在Java中有效地将整数放在小数点后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47112640/

相关文章:

java - 可以使用 java 读取来电吗?

java - 如何在 Java 中比较字符串?

java - 在java中将 float 转换为具有相同位表示形式的整数?

java - 较大的小数和浮点输出上的 "E"或 "e"字符是什么意思?

floating-point - 为什么浮点运算在某些语言中显示不同?

java - Android ScrollView 将不再滚动

JAVA - 在接口(interface)中定义一个方法

java - 在 Java 中同时对三个 ArrayLists 进行排序的最有效方法是什么

floating-point - 如何在不使用不安全代码的情况下将 float 转换为二进制数?

c - Fscanf 段错误