Java: Why we need to cast a float but not a double?

前端 未结 3 542
别那么骄傲
别那么骄傲 2021-01-17 04:13

I don\'t know if you consider this an important question or not but I want to know. float is a float number (4 bytes). double is a float number (8 bytes). Why we define doub

相关标签:
3条回答
  • 2021-01-17 04:37

    Doubles are more precise and the extra storage cost is almost always negligible. So in Java by default 2.1 is a double type. Now to convert double to float you need to cast while assigning double data to double type cast is not required.

    0 讨论(0)
  • 2021-01-17 04:38

    By default, Java compiler perceives 2.1 as being a double (64 bits) and not as a float (32 bits). Declaring float f=2.1 would result in loss of precision. Hence, Java forces you to do the casting to make sure you are declaring a float variable.

    Without casting, you can achieve the same with the letter 'f' at the end of floating point numbers. For example, float f=2.1f.

    Now you might ask, why a cast isn't required while converting from a long to a float because the former uses more bits internally than the latter. The answer is Java needs no casting on a widening path - byte => short => int => long => float => double. (Left to right (a widening conversion) - cast is not required; Right to left (a narrowing conversion) - explicit cast is required)

    0 讨论(0)
  • 2021-01-17 04:40

    A floating-point literal is of type float if it ends with the letter F or f; otherwise its type is double and it can optionally end with the letter D or d.

    The floating point types (float and double) can also be expressed using E or e (for scientific notation), F or f (32-bit float literal) and D or d (64-bit double literal; this is the default and by convention is omitted).

    double d1 = 123.4;
    // same value as d1, but in scientific notation
    double d2 = 1.234e2;
    float f1  = 123.4f;
    

    See Floating-Point Literals in oracle Java Tutorial

    0 讨论(0)
提交回复
热议问题