带双精度的Java round()
我正试图编写一个小java程序,在给定的函数f(x)中查找空点 这是我的想法: 我有X1和X2(用户输入)来定义一个搜索空点的区域。例如-5和5带双精度的Java round(),java,numerical-methods,double-precision,Java,Numerical Methods,Double Precision,我正试图编写一个小java程序,在给定的函数f(x)中查找空点 这是我的想法: 我有X1和X2(用户输入)来定义一个搜索空点的区域。例如-5和5 private static double Naehern(double X, double X2) { double Y = -1; double Step = 0.01; while(Y < -0.00001 || Y > 0.00001) { X = X + Step; Y =
private static double Naehern(double X, double X2) {
double Y = -1;
double Step = 0.01;
while(Y < -0.00001 || Y > 0.00001) {
X = X + Step;
Y = f(X);
if(X >= X2) {
break;
}
}
return X;
}
static double f(double x) {
return x * x;
}
我如何通过仍然使用双打来解决这个问题
其次,我在节目结束时得到了这个号码:-6.230779781013496E-14
。这是在X=-6.230779781013496E-14
处找到的空点。我怎样才能把这个数字转换成一个普通可读的双精度数字,在“.”后面加上5个字符?a)你不能,除非你使用一个完全可以用二进制表示的步长,比如1/128而不是1/100(不是1/100)
b) 您可以使用
printf(“%.5f”,…)
,但在您的情况下,输出将仅为0.00000 您可以使用System.out.printf
、String.format
或NumberFormat class
来格式化数字
浮点和双精度不是精确的值。如果您想要更高的精度,有比float/double更好的方法。是的,
BigDecimal
,我在看你。浮点和双精度总是值的近似值。它们对科学和工程计算很有用,但对数学和金融却不太有用。如果你知道你要做的计算是精确的,并且有一个已知的固定精度,那么这是一个考虑使用BigDeCimple而不是双的好时机。我仅次于SCOTTB的建议。如果数字精度很重要,你真的需要学习如何使用BigDecimal。是的,我知道如何格式化它,我也可以使用Math.round(X*10000)/10000,但在这种情况下,它只能在0.0中恢复。我的问题是:如何阻止程序计算这些超小的数字?我只想要X=0.00034,而不是0.0000000000000000000000000000000000253。怎么用?我用while(Y<-0.00001 | | Y>0.00001)试过了。@user2999582你无法阻止它。这就是IEEE浮点运算的工作原理。使用BigDecimal@user2999582 Radiodef原则上是正确的,但请注意我在a点中所说的。如果您选择具有精确表示的数字,则这些数字的和与差也将是精确的。因此,如果你从5.0开始,然后以0.0078125(1/128)开始,你将不会遇到那些“超小数字”。
X: -4,99
X: -4,98
X: -4,9700000000000000001