如何在Java中以10的幂获得两倍的指数?

时间:2018-10-25 15:35:50

标签: java double

(对不起,我不知道什么是描述此问题的最佳关键字。)

主要问题是,如果我在Java中有一个双精度数字,例如 25.003 ,我怎么知道这个数字可以用 25003 x 10 ^(-3)< / strong>,以便获取指数部分(-3)

我唯一想做的就是获取那个指数数(-3)。(所以我知道我可以将25.003乘以1000使其成为整数)是否有任何方法可以使我得到指数数字?

非常感谢。

3 个答案:

答案 0 :(得分:1)

如果您将其视为字符串,这实际上非常简单。

private static int getExponentForNumber(double number)
{
    String numberAsString = String.valueOf(number);
    return numberAsString.substring(numberAsString.indexOf('.') + 1).length() * -1;
}

这只是返回“。”之后的长度。这是你的负面指数。所以您真的可以像这样使用它:

int exponent = getExponentForNumber(25.003);
int basis = Integer.valueOf(String.valueOf(25.003).replace(".", ""));
String expression = "25.003 equals " + basis + "*10^" + exponent;
System.out.println(expression);

25.003 equals 25003*10^-3

答案 1 :(得分:1)

这应该有效:

private static int getExponent(double number)
{
    String str = String.valueOf(number);
    int pointIndex = str.indexOf('.');
    if (pointIndex == -1  || pointIndex == str.length() - 1)
        return 0;

    while (str.endsWith("0")) {
        str = str.substring(0, str.length() - 1);
    }

    pointIndex = str.indexOf('.');
    if (pointIndex == str.length() - 1)
        return 0;

    String[] splitted = str.split("\\.");
    return -splitted[1].length();
}

public static void main(String[] args) {
    double d1 = 12.36;
    double d2 = .36;
    double d3 = 12.;
    double d4 = 0.101;
    double d5 = 15;

    System.out.println(d1 + " " + getExponent(d1));
    System.out.println(d2 + " " + getExponent(d2));
    System.out.println(d3 + " " + getExponent(d3));
    System.out.println(d4 + " " + getExponent(d4));
    System.out.println(d5 + " " + getExponent(d5));
}

打印

12.36 -2
0.36 -2
12.0 0
0.101 -3
15.0 0

答案 2 :(得分:1)

Scanner in = new Scanner(System.in);
Double d = in.nextDouble();
String[] parts = d.toString().split("\\.");
System.out.println(parts[0] + " *10^ -" + parts[1].length());