我们说我有变量名为pi(float)& pi2(双)。我将(float)3.14159的值赋给了pi,它的确是3.14159。
float pi;
pi = (float)3.14159;
System.out.println(pi); //3.14159
我将pi(float)变量类型化为double,并为其指定pi2(double)的值。但是我得到的值并不完全是3.14159。我得到3.141590118408203,它的有效数字比3.14159更高,但它不如3.14159精确,因为它距离3.14159更远。另一方面,如果我直接指定pi2 = 3.14159,它恰好是3.14159。
double pi2 = (double)pi;
System.out.println(pi2); //3.141590118408203
pi2 = 3.14159;
System.out.println(pi2); //3.14159
为什么当我将double更改为float并将其再次更改为double时,我会得到不必要的不精确?
对this question的回答并不明确:"当您将浮动转换为双精度时,不会丢失任何信息。每个浮点数都可以完全表示为双精度。"为什么当我们从float转换为double时,有额外的非零有效数字会降低精度而不是增加它?如果他说的是真的没有从浮动到双倍的信息丢失,我应该得到3.141590000000000而不是3.141590118408203。