Java 获取double的十进制数

Java 获取double的十进制数,java,math,Java,Math,我正在使用一个cos值,它用double表示。所以我的边界在-1.0和1.0之间,但是对于我的工作,我只是忽略了所有的负变量 现在我想得到这个双精度数字的十进制数(很抱歉,我找不到这个操作的文献术语) 基本上是举例说明: 假设输入为0.12,那么可以将其写成1.2*10^-1,我希望得到的只是它为10^-1的部分 另一个例子是0.00351,可以写成3.51*10^-3,因此预期结果是10^-3 我在下面开发了这个算法,但它有点快而且脏。我想知道是否有任何数学技巧可以避免使用循环 double

我正在使用一个cos值,它用double表示。所以我的边界在-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;
}
double result=1;
而(输入<1.0){
输入*=10.0;
结果/=10.0;
}
此外,如果输入为0,则上述操作也无法处理


如果有帮助的话,我将使用Java进行编码。

您似乎在寻找数字的基数10指数-用于此操作

 Math.log10(input)
e、 g

等等

您需要记住所使用的基数(本例中为10)

给出:


abs
是用来处理负数的,你可以用它来处理不同的负数。

如果你实际上是在寻找字符串,比如
“10^-2”
(正如你所说的,预期结果将是这种格式)


如果输入为0,该怎么办?@user2357112那么输出应为0。如果输入为负数,该怎么办?谢谢,但输出的形式不正确。例如,它给出的是-3而不是0.001。在这种情况下,只需使用以获得最接近的幂。更不用说
Math.log10(1.5)=0.17609125905568124
,而不是
0
。你需要把它放在地板上。此外,它可能需要一些符号旋转来处理负输入。是的,OP需要防止
log(谢谢,但输出的形式不正确。例如,它给出的是-3而不是0.001谢谢,只是出于好奇,这种方法比我的更有效吗?(这真的很重要,因为我需要每秒数十万次的计算)应该是这样,但你需要测试它以确保。我做了一些测试,你的代码运行速度比我的代码快3倍
log10(100) = 2
log10(1e-5) = -5
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
public String getCientific(double input){
    int exp;
    exp = (int) java.lang.Math.floor(java.lang.Math.log10(input));
    return  "10^" + exp;
 }