我正在使用以双精度表示的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进行编码。
答案 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;
}