I am not sure I understand about the compiler conversion though?
Type conversions are when a variable type is changed to a different type. For example an integer is a whole number (1, 2, 3, etc.) and a float is a floating point number (basically a decimal 1.23, 10.5, etc.) and they are different things. Now if you let the compiler decide which type you wanted to use it can have unwanted consequences. For example, using floats, 3.0 divided by 2.0 gives a result of 1.5 as a float. If we mix our types though, and divide a float of 3.0 by an integer of 2, without specifying what we want the answer in, we will still most likely get a float of 1.5 but it's not guaranteed and is decided by the compiler - the answer may well be given as exactly 1.
What about if we don't mix types and divide the integer 3 by the integer 2? The result is the integer 1, so 3/2 = 1!! This is how integer division works, where remainders are discarded. In this example, if we let the compiler decide the type of the result, it will return an integer of 1, rather than a float of 1.5 (most likely anyway). From our example above, 3.0/2 is possibly going to return an integer of 1 as well, even though at first glance it looks like we are performing float division rather than integer division. So because of all this potential for problems, we must make sure we don't have any ambiguity by either not mixing variable types, or specifying the types used for calculations and results (it's called type casting).
Lastly, if we take a returned value (let's say a float of 2.99) and attempt to use it where the program is expecting a different type (we'll say an integer) the compiler will do the typecasting for us and likely convert the float from 2.99 to an integer of 2, so we just lost over 30% of the value of our variable. You can see how many problems can arise from this.
When a program is written with typecasting issues like this, it may function perfectly due to the values being used (eg 10/2 = 5, etc.) but then small changes are made, such as needing a ratio change from 10/2 to 11/2 using integer values, and we hit conversion issues.
This was supposed to be a quick explanation but I'm not sure I succeeded...let me know if it's not clear.