double.ToString("G_") doesn't work with large numbers

I’m having an issue where ToString with format code “G” for doubles or floats does not limit the number of digits for very large numbers, above say 10^19. It worked for small numbers down to 10^-300.

3.1416
31.416
314.16
3141.6
31416
3.1416E+05
3.1416E+06
3.1416E+07
3.1416E+08
3.1416E+09
3.1416E+10
3.1416E+11
3.1416E+12
3.1416E+13
3.1416E+14
3.1416E+15
3.1416E+16
3.1416E+17
3.1416E+18
3.14159265358979312E+19
3.14159265358979312E+20
...