简体   繁体   中英

Java: incompatible types, possible lossy conversion from double to float

why do I get this error message when i try to compile the following code?

float a = 1/0.1;
System.out.println(a);

or

float b = 1/0.002;
System.out.println(b);

incompatible types: possible lossy conversion from double to float

Am i getting an overflow? I'm looking to understand the theory behind this. Thanks in advance.

Use float literals:

float a = 1f / 0.1f;

0.1 and 0.002 are double literals. Java's double type has more precision than its float type. So, when you convert from double to float , the number may be changed by rounding it to the nearest value representable in float . Using decimal as an analogy, assigning the four-digit.1234 to a two-digit type would produce a different number, .12.

When you do this conversion implicitly, by assignment to a float variable, the compiler tells you there could be a loss of information. By using a cast, you tell the compiler the conversion to a less precise format is intentional. Or by using float literals such as 0.1f and 0.002f , you work with float values throughout and avoid conversion.

Generally, pick one type, float or double and use it throughout your calculations, for both literals and variables.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM