pi的舍入误差

Kur*_*urt 2 java math double android pi

我正在尝试制作一系列代码,根据用户输入的高度和半径计算锥体的体积(见下文).

我的问题是答案出错了(但不是很长).使用height = 5,radius = 10的例子,我从500的代码中得到答案(将pi视为3),但是手动计算得到~523.

我假设它与我声明pi的变量类型有关(双重然后转换为long)但我努力使变量类型的任何其他组合起作用.

以下正确的版本是什么,将正确存储pi(至少5或6分钟)?

                double piDouble = Math.PI;

                long height = Long.parseLong(heightString);
                long pi = (new Double(piDouble)).longValue();
                long radius = Long.parseLong(radiusString);

                long volumeBase = (pi*(radius*radius)*height) / 3;
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 8

long pi = (new Double(piDouble)).longValue();是一个很长的,所以它完全等于3.

如果您需要更高的精度,请一直使用double,最后只使用round.这应该会给你你期望的结果:

double piDouble = Math.PI;
long height = Long.parseLong(heightString);
long radius = Long.parseLong(radiusString);
double volumeBase = (piDouble * (radius * radius) * height) / 3;
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以对结果进行舍入:

long roundedDownVolume = (long) volumeBase; //round down
long roundedVolume = Math.round(volumeBase); //or round to the closest long
Run Code Online (Sandbox Code Playgroud)