获取双精度的十进制数

时间:2014-06-03 05:42:55

标签: java math

我正在使用以双精度表示的cos值。所以我的界限介于-1.0和1.0之间,但是对于我的工作,我只是忽略了所有的负面变量。

现在我想得到这个双号的十进制数(对不起,我找不到这个操作的文献术语)

基本上有例子:

假设输入为0.12,那么这可以写成1.2 * 10 ^ -1,我期望得到的只是10 ^ -1的部分

另一个例子是0.00351,可以写成3.51 * 10 ^ -3,所以预期的结果是10 ^ -3

我在下面开发了这个算法,但它有点快速和肮脏。我想知道是否有任何数学技巧可以避免使用循环。

double result = 1;
while (input < 1.0) {
   input *= 10.0;
   result /= 10.0;
}

如果输入为0,上述情况也不会处理。

如果有帮助,我正在使用Java进行编码。

3 个答案:

答案 0 :(得分:3)

看来您正在寻找数字的10位指数 - 使用Math.log10来执行此操作

 Math.log10(input)

e.g。

log10(100) = 2
log10(1e-5) = -5

你需要记住你使用的基础(在这种情况下为10)

答案 1 :(得分:3)

public class Tester {

    public static double lowbase(double v) {
        return Math.pow(10, Math.floor(Math.log10(Math.abs(v))));
    }   

    public static void main(String [] args){
        System.out.println(lowbase(0.12));
        System.out.println(lowbase(0.00351));
        System.out.println(lowbase(0));
        System.out.println(lowbase(-1));
    }   

}

给出:

0.1
0.001
0.0
1.0

abs用于处理负数,你可以用不同的方法来处理负数。

答案 2 :(得分:1)

如果您实际上正在寻找"10^-2"之类的字符串(正如您所说,预期结果将采用此格式)。

public String getCientific(double input){
    int exp;
    exp = (int) java.lang.Math.floor(java.lang.Math.log10(input));
    return  "10^" + exp;
 }