Math.pow使用小数指数

时间:2015-07-07 02:16:03

标签: java floating-point exponentiation

这是我写过的第一个代码。这是我的代码的一部分,用于在用户给出卷的值之后计算立方体和四面体的边长,但输出不正确。我很确定我的方程是正确的,也许我正在使用Math.pow方法错误?

System.out.println("Now, please enter a volume for side or diameter calculation, then press ENTER: ");

volume = input.nextDouble();
cubeSide = Math.pow(volume, (1/3));
sphereDiameter = Math.pow(volume / PI * 6, (1/3));
tetSide = SQRT_2 * Math.pow(3 * volume, (1/3));

System.out.println("");
System.out.println("The Side of your CUBE is : " + cubeSide);
System.out.println("");
System.out.println("The Diameter of your SPHERE is : " + sphereDiameter);
System.out.println("");
System.out.println("The Side of your TETRAHEDRON is : " + tetSide);

关于如何获得正确输出的任何想法?

2 个答案:

答案 0 :(得分:3)

1/30 - 当被除数和除数都是积分时,/执行积分除法。您想要1.0 / 31 / 3.01.0 / 3.0,评估为0.3333333 - ish。

答案 1 :(得分:1)

您的问题是此问题的一个实例Division of integers in Java

Bassically,你需要将Math.pow()的1/3部分强制转换为double,因为如果你没有默认使用它,它将把结果作为整数(总是0)。

例如:

    double volume = 15.34;
    double fraction = (double) 1/3;
    double cubeSide = Math.pow(volume,fraction);
    System.out.println(cubeSide);

输出

  

2.4847066359757295

否则输出始终为1.0。这是任何数字上升到零的结果。

如评论中所述,输入为:

  

1000

输出应该是一个整体:

  

10

但实际上是:

  

9.999999999999998

最简单的解决办法就是:

float roundedValue = Math.round(cubeSide);

说:那不是我的问题。但我们想了解这是怎么回事。就像这个世界上的大多数事情一样,你不是第一个面对这个问题的人。让我们做一些研究,发现在StackOverFlow中有人问过:

在第一个链接中,建议阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic

我不会重复那些比我更了解的聪明人所说的话,所以我强烈建议你阅读以上链接。