2015-08-28 113 views
-3

答案在书中没有任何意义,我所以这里的问题:变量a是一个浮点数,变量b是一个双精度浮点数。写语句,将

变量a是浮子和可变b是双。编写一个语句,该语句将在编译程序时将值b指定为a而不会导致错误。

下面是我在书中找到了答案:

fvar = (float)dvar; 

Whaaaat ????

这就是我认为可能的工作:

public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
    float a = 7.5; 
    double b = 12.25; 
    a = (double)b; 
    } 
} 

还没想出来,所以任何的帮助深表感谢。

+0

如果您需要将**从双精度**转换为**浮点数,为什么'a =(double)b'有效? – fabian

+3

fvar =(float)dvar'究竟有什么不清楚?你为什么期望演员能更好地“双重”工作? – Seelenvirtuose

+0

我试着用(双)和(浮动)铸造,仍然出现错误。仅供参考这个java的东西.... fvar =(浮动)dvar不清楚,因为变量是a和b ... –

回答

0

答案是完全合理的,因为a是一个浮点值,它不像b是双精度值那么精确。 look here

哪一个告诉编译器它只知道这些类型不匹配的变量的类型。由于它们都是浮点数,所以可以将b(double)转换为(浮点数),这会导致精度损失,因为double可以保存比浮点更精确的数字。

如果您将b转换为float,则告诉编译器将该数字剪切为float。

6

所写的一书的作者是正确的

fvar = (float)dvar; 

如果我们看一下你的代码行,

a = (double)b; 

您铸造双重再翻一番。你必须做的就是投入浮动,这是写在书上。作者是正确的。

+0

首先,我相信你! 第二关,我试图铸造FLOAT和它没有工作 所以这里是我的代码现在: 公共类的HelloWorld { 公共 静态无效的主要(字串[] args){ \t浮子上的= 7.5; double b = 12.25; a =(float)b; } } 和我得到 “/tmp/java_nvyAbf/HelloWorld.java:13:错误:不兼容的类型:从双可能有损转换为float \t浮子上的= 7.5;” 这次我做了些什么? –

+0

好吧,如果我没有用任何值初始化a并初始化b,则将它作为浮点工作。为什么不能初始化? –