Java 是否可以通过字符串格式化程序以比浮点更高的精度显示double?

Java 是否可以通过字符串格式化程序以比浮点更高的精度显示double?,java,visual-studio-code,precision,Java,Visual Studio Code,Precision,在Java中使用double时如何保持精度?我有以下测试用例: double x = -1.0 / 3.0; double y = 1.0000000001; Point2 p = new Point2(x, y); String expected = "(" + x + ", " + y + ")"; assertEquals(expected, p.toString()); 点2构造函数: public Point2(double x, double y) { this.x = x;

在Java中使用double时如何保持精度?我有以下测试用例:

double x = -1.0 / 3.0;
double y = 1.0000000001;
Point2 p = new Point2(x, y);

String expected = "(" + x + ", " + y + ")";
assertEquals(expected, p.toString());
点2构造函数:

public Point2(double x, double y) {
  this.x = x;
  this.y = y;
  }
toString覆盖:

@Override
public String toString() {
  return String.format("(%f, %f)", this.x, this.y);
}
哪个失败了:
org.junit.ComparisonFailure:expected:但是:

问题出现在我的toString()方法中。它们现在被格式化为浮动是有道理的。最终将其更新为:

@Override
public String toString() {
    return "(" + this.x + ", " + this.y + ")";
}

Point2
的源代码是什么?您正在测试p.toString()的结果。代码是什么?发布一个完整的最小示例,再现问题。我将其添加到问题中。有趣的是,我做了
double x=double.MAX_VALUE
,这很有效,但它仍然只保留了6位小数。好吧,您正在使用
String.format((%f,%f)”,this.x,this.y)
打印您的值。如果您希望结果与
“(“+x+”,“+y+”)”
相同,那么在toString()方法中使用
返回“(“+x+”,“+y+”)”
。好的,很好-很好,感谢它们没有被格式化为浮点数。它们根据默认区域设置进行格式设置,并具有默认精度(因为您没有指定精度),小数点后有6个数字。这就是String.format()如何指定它对%f执行的操作。它并不是像您所想的那样对数字调用toString()。有没有一种方法可以使用String.format()来显示不同精度的双精度(而不提前知道小数点的数量,例如6或更多)?我不这么认为。