2011-09-18 120 views
-1

如何乘以* 10 ^( - 20)。我找不到任何对数函数,所以我希望会有一些其他的函数用于乘以非常小或非常大的数字

+3

爪哇'doubles'覆盖范围4.9 * 10^-324〜1.7 * 10^308,阳性或阴性。够了吗?如果是这样,你可以使用普通的'*'运算符。 – Douglas

+2

数学实用课有很多对数方法,但我支持道格拉斯的评论,如果这是一个答案,我会对它投票。 –

+2

你的意思是乘以1e-20? –

回答

0

我不会使用日志功能,我会用Math.pow

double d = a * Math.pow(10, -20); 
+1

Java支持浮点文字,所以你可以写:'a * 1.0e-20' – Douglas

1

您可以使用BigDecimal类,它可以存储较大的值用于计算。

+1

为什么这个答案给出了-1? OP在哪里提到浮点值?这个问题最近有过修改吗?即使他使用的是浮点数,对非常小的数字进行计算并使用浮点数也会导致很多问题,您可以通过使用类BigDecimal来避免这些问题。这是关键,要保持准确性并避免浮点运算出现的问题。 – Asaf

+0

@JimLewis - 在使用浮动/双精度进行计算时,没有使用BigDecimal的预防 - 相反,它更安全并减少了使用浮点数和双精度类型的缺陷。看看[这里](http://www.ibm.com/developerworks/java/library/j-jtp0114/)或[这里](http://stackoverflow.com/questions/6320209/javawhy-should-我们使用bigdecimal而不是double-in-the-real-world) –

+0

@inistel:我被你的原始答案中的第一句话所误导,其中指出:“这个类表示不变的整数长度。”但我现在看到它也可以表示非整数。我仍然认为这不是OP应该研究的解决方案,但我会很高兴地取消掉落。 –

3

Java doubles覆盖范围4.9 * 10^-324至1.7 * 10^308,正数或负数。如果您的数字在该范围内,并且您很乐意使用浮点精度,则可以使用正常的*运算符。

Math.log方法的文档是here