The cause is the large differences in order of magnitudes in both directions, you can solve this:
pts = {
{ 0. ,0. }, (* P1 *)
{ 0. ,4.55*^6 }, (* P2 *)
{ 0.073 ,4.55*^6 }, (* P3 *)
{ 0.2 ,1.2661197*^7}, (* P4 *)
{ 0.65 ,1.87575*^7 }, (* P5 *)
{ 1. ,1.87575*^7 }, (* P6 *)
{ 1. ,0. } (* P7 *)
};
pts = SetPrecision[pts,20];
btw, there is no need to define e.g. pts, poly etcetera using :=, = is ok.