java:简单类型转换

时间:2013-10-06 04:15:28

标签: java windows eclipse

我在windows上的eclipse上编写了我的第一个java程序。我最近开始在linux上编写java。

当我尝试在Linux上编译上述程序时,它确实可以正常工作但是当我尝试在Windows上执行它时会出现以下错误。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Type mismatch: cannot convert from int to short
    Type mismatch: cannot convert from double to float

public class TypeDemo {

    public static void main (String args[])
    {
            byte b = 8;
            long a = 1000011334;
            int c = 76;
            short s = 99789;

            float f = 99.99;
            double d = 99979.9879;
            boolean bool = true;
            char ch = 'y';

            System.out.println ("b = "+b);
            System.out.println ("a = "+a);
            System.out.println ("c = "+c);
            System.out.println ("s = "+s);
            System.out.println ("f = "+f);
            System.out.println ("d = "+d);
            System.out.println ("bool = "+bool);
            System.out.println ("ch = "+ch);
    }
}

7 个答案:

答案 0 :(得分:4)

  

当我尝试在Linux上编译上述程序时,它确实可以正常工作

这实际上是相当令人惊讶的,我不能买它。再检查一遍,不应该。

short是一个16位有符号2的补码整数。它的最大值为32767,您正在为其分配99789。它绝对超出范围。您需要明确地将其类型转换为short

short s = (short)99789;
short s1 = 100;   // this would however work

虽然你会看到奇怪的输出。额外的位将被截断。最好直接使用int

现在,在float的情况下,浮点文字默认为double。要获得float,您需要在结尾添加Ff。所以,将那个改为:

float f = 99.99f;

答案 1 :(得分:0)

这很简单。你需要做一个类型转换:

float f = 99.99f;

float f = (float)99.99;  // This is a type cast

您正在尝试将“大”数字存储到短变量中。 short只能存储从-32.768到32.767的值。

答案 2 :(得分:0)

使用此代码

在您的代码中,您尝试将较大的数据类型分配给较小的数据类型,最终会导致精度损失,这是不允许的,因此您需要显式的类型转换

  
    

短s =(短)99789;而对于浮动,你有两个操作

  
     

float f = 99.99f;

     

     

float f =(float)99.99;(因为十进制值默认为double)

public static void main(String args[]) {
    byte b = 8;
    long a = 1000011334;
    int c = 76;
    short s = (short) 99789;

    float f = 99.99f;
    double d = 99979.9879;
    boolean bool = true;
    char ch = 'y';

    System.out.println("b = " + b);
    System.out.println("a = " + a);
    System.out.println("c = " + c);
    System.out.println("s = " + s);
    System.out.println("f = " + f);
    System.out.println("d = " + d);
    System.out.println("bool = " + bool);
    System.out.println("ch = " + ch);
}

请记住,只允许那些不会导致精度损失的转换

答案 3 :(得分:0)

        `float f = 99.99;`     //need to include f at last or need to type cast;

需要

            float f = 99.99f;
            or
            float f = (float)99.99; 

       short s = 99789;      //exceeded the limit  

限制应为

short:短数据类型是16位带符号的二进制补码整数。它的最小值为-32,768,最大值为32,767(含)。与字节一样,相同的准则也适用:在内存节省实际上很重要的情况下,您可以使用short来节省大型阵列中的内存。

有关java数据类型的更多信息,请参阅此处http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 4 :(得分:0)

short是16位整数(0-65535无符号; -32768-32767有符号)。你对s的价值太大,所以它被视为int

Java默认将99.99视为双精度。只需将f附加到该float f = 99.99f)的末尾即可解决该问题。

答案 5 :(得分:0)

short s = 99789;

short是 16位值,而int是 32位 .99789或任何数字在java中预定义为 int 。所以你必须手动转换你正在缩小数据类型。

 short s = (short) 99789;

答案 6 :(得分:0)

错误在:

short s = 99789;

“短”数据类型的最大值为32767。

99789> 32767会导致精度损失。

而是尝试:

int s = 99789;

类似地:

float f = 99.99;

应该是双倍的:

double f = 99.99;

希望有所帮助!