Reason
Machine uses binary language When it convert number into binary , convert back into decimal The value get changed ,due to some number can't be converted Completely in binary
When you convert 0.1 into base 2 (binary)
you get a repeating pattern after the decimal point,
Like 1/3 in base 10 ; 1/3=0.333333333333333333333333333333333..........
& never get Exact value
Therefor you can't Get every number's exact Value using normal floating point methods.
Example (Conversion Pattern)
0.1 Pattern In Binary...

Source: Why 0.1 Does Not Exist In Floating-Point
0.1 Conversion 0.1 is one-tenth, or 1/10. To show it in binary
You can See 100
is repeating after intervals As Giving output as 1001
as Shown In Diagram

Source: Why 0.1 Does Not Exist In Floating-Point
Second Code Snippets {Answer of 0.1+0.2 Is not Same as actual value of 0.3}
--------------------------------------------------------------
Actual {Answer of 0.1+0.2 Is not Same as actual value of 0.3}
--------------------------------------------------------------
0.1=0.1000000000000000055511151231257827021181583404541015625
0.2=0.200000000000000011102230246251565404236316680908203125
0.3=0.299999999999999988897769753748434595763683319091796875
==============================================================
Calculation 0.1 + 0.2
______________________________________________________________
0.1=0.1000000000000000055511151231257827021181583404541015625
+0.2=0.200000000000000011102230246251565404236316680908203125
--------------------------------------------------------------
0.3=0.3000000000000000444089209850062616169452667236328125
==============================================================
Answer
--------------------------------------------------------------
0.3000000000000000444089209850062616169452667236328125
!=0.299999999999999988897769753748434595763683319091796875
---------------------------------------------------------------
First Code Snippets {Answer of 0.2+0.2 Is Same as actual value of 0.4}
---------------------------------------------------------------
Actual {Answer of 0.2+0.2 Is Same as actual value of 0.4}
---------------------------------------------------------------
0.2=0.200000000000000011102230246251565404236316680908203125
0.2=0.200000000000000011102230246251565404236316680908203125
0.4=0.40000000000000002220446049250313080847263336181640625
==============================================================
Calculation 0.2 + 0.2
---------------------------------------------------------------
0.2=0.200000000000000011102230246251565404236316680908203125
+0.2=0.200000000000000011102230246251565404236316680908203125
---------------------------------------------------------------
0.4=0.40000000000000002220446049250313080847263336181640625
==============================================================
Answer
--------------------------------------------------------------
0.4=0.40000000000000002220446049250313080847263336181640625
==0.4=0.40000000000000002220446049250313080847263336181640625
---------------------------------------------------------------
Source:Is floating point math broken?
Source:Why 0.1 Does Not Exist In Floating-Point
Further Guide About Float Point
Guide By Oricle
Examine Number
IEEE 754 double-precision binary floating-point format