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

在Java中有效地将整数放在小数点后,java,floating-point,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.isDecDig

我有任何未签名的
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;
}
private long scanDecDigits()
{
int-digIndex=0;
char ch;
while(input.remains())
{
ch=input.get();
如果(!AS3Char.isDecDigit(ch))
打破
//最多推10位;忽略其余部分。
如果(i<10)
numDigits[digIndex++]=ch-'0';
}
decBase=Math.pow(10,digIndex);
长sub=decBase;
长值=0;
对于(digIndex=0;sub!=0;sub/=10)
value+=numDigits[digIndex++]*sub;
返回值;
}
或者,这也适用于:

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;
    }
}
公共类主
{
公共静态void main(字符串[]args)
{
System.out.println(putInDecimal(255));
}
公共静态双输入(长lv)
{
返回((双)lv)/(双)tenPow(lv));
}
公共静态长tenPow(长lv)
{
返回(lv<10)?10:
(lv<100)?100:
(lv<1e3)?(长)1e3:
(lv<1e4)?(长)1e4:
(lv<1e5)?(长)1e5:
(lv<1e6)?(长)1e6:
(lv<1e7)?(长)1e7:
(lv<1e8)?(长)1e8:
(长)1e9;
}
}

提示。

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

更多数学解决方案:

return lv / Math.pow(10, Math.ceil(Math.log10(lv + 1)));
两者都只适用于非负值。如果您需要管理负数,这应该可以:

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

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

更多数学解决方案:

return lv / Math.pow(10, Math.ceil(Math.log10(lv + 1)));
两者都只适用于非负值。如果您需要管理负数,这应该可以:

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

您可以在
tenPow
中使用
Math.log10
Math.pow
而不是三元运算符。您的第一个代码块甚至可以编译吗?在哪里定义了
input
v
decBase
等?更简单的解决方案(可能效率更低):
Double.parseDouble(“0.”+lv)
。您可以在
tenPow
中使用
Math.log10
Math.pow
,而不是三元运算符。您的第一个代码块甚至可以编译吗?在哪里定义了
input
v
decBase
等?更简单的解决方案(可能效率更低):
Double.parseDouble(“0.”+lv)
。两者都只适用于正值;,这意味着这不适用于
0
?让我想想……对不起,我应该写“非负”值。编辑我的帖子以反映两者都只适用于正面价值观;,这意味着这不适用于
0
?让我想想……对不起,我应该写“非负”值。编辑我的文章来反映这一点