Java String.format(%.2f,double)仅在一半的测试中有效

Java String.format(%.2f,double)仅在一半的测试中有效,java,parsing,formatting,double,Java,Parsing,Formatting,Double,我正在尝试设置双精度值的格式,因此它们只有2个十进制空间: remainingAmount = Double.parseDouble(String.format("%.2f",remainingAmount - calculatePrincipalPayment())); 如您所见,此代码使用String.format(),格式化双精度值remainingAmount-calculatePrincipalPayment(),然后将其从字符串传输到双精度值,并将其分配给双精度变量remainin

我正在尝试设置双精度值的格式,因此它们只有2个十进制空间:

remainingAmount = Double.parseDouble(String.format("%.2f",remainingAmount - calculatePrincipalPayment()));
如您所见,此代码使用
String.format()
,格式化双精度值
remainingAmount-calculatePrincipalPayment()
,然后将其从字符串传输到双精度值,并将其分配给双精度变量remainingAmount(已声明)
remainingAmount
是双精度的,
calculatePrincipalPayment()
返回双精度

问题在于它只格式化了部分值,例如,它可以返回401.37(这是必需的格式)以及403.7199999997。 我还尝试使用DecimalFormat df=new DecimalFormat(“#.##”)进行格式化

A
double
(或其装箱对应的
double
)无法存储作为字符串呈现时使用的特定格式。这只是一个原始值

我怀疑您相信,通过解析特定格式获得的
double
值以某种方式保留了该格式。事实并非如此


浮点类型不精确;并非所有的值都能准确存储。在无法存储精确值的情况下,将使用最接近的可存储值,就像某些结果一样。

double
没有格式,只有字符串可以解析,但它不会做你想的。如果你运行
403.719999999997
的代码,你会得到
403.72
你能给出一个例子来产生你想要的输出吗?欢迎!我注意到的第一件事是,在一行中从一个双精度到一个字符串再到一个双精度。在最终准备好打印之前,根本不需要使用字符串。编辑您的帖子,创建代码示例以及示例输入和输出,以便我们能够更好地帮助您。