从float转换为double时精度会损失?

时间:2017-08-21 05:09:35

标签: java double precision

我们说我有变量名为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。

0 个答案:

没有答案