我试图取两个数字并得到它们的平方。使用几个数字一些工作,但这一个给我问题pow(.0305,2)。使用计算器我得到的回答:0.093025;但是当我使用java时,我得到了一个答案:9.609999999999999E-4。我需要.0305,因为我服用的是3.05 / 100,即.0305。
我通过试验发现,如果我做.pow(.305,2),这确实给了我需要答案,但是我必须得到3.05 / 100。
编辑:(添加代码)
double weight=3.05;
double TapeLength=100.00;
double ftwt= weight/TapeLength; this gives me: 0.093025
double ftwt= Math.pow(ftwt,2); //this gives me: 9.3025E-4
一切都是双重的。
答案 0 :(得分:4)
如果你真的得到9.609999999999999E-4
,那么除了你提出的问题之外,你做错了。以下代码(在Eclipse 3.7.1中):
class Test {
public static void main(String args[]) {
double dd = .0305;
System.out.println (Math.pow(dd, 2));
System.out.println ("%.8f\n", Math.pow(dd, 2));
}
}
产生
9.3025E-4
0.00093025
两者正确(a),只是用不同的输出格式表示。在这种情况下,double
的默认值是指数格式,但最后一行显示了如何获得不同的格式。
(a)如果您对指数形式感到困惑(基于您的评论),0.00093025
与相同9.3025E-4
因为后者意味着9.3025 x 10-4
(9.3025
,小数点向左移动了四个位置。
答案 1 :(得分:0)
除了数量级的问题,我认为这只是一个打字错误,如果你担心你得到0.00096xxxxx,你应该从开始指定它们为double。你正在使它们浮动,这意味着你失去了精确度,只有这样它们才能被加倍。然后通过平方来加剧错误。
使它们成为双打可能会有所帮助,但你必须记住,当你处理十进制有理数的二进制表示时,可能没有一个具有有限位数的精确表示。
答案 2 :(得分:0)
使用Math.pow(x, 2)
比使用x * x
慢得多,这是因为它与Math.exp(Math.log(x) * n)
相同,因为它会进行更多的计算,因此往往会出现更大的舍入误差。 (所以这是一个坏主意恕我直言)