Actualización del siguiente comentario de user1676558
Prueba esto:
decimal one = 1000M;
decimal two = 12.5M;
decimal three = 12.567M;
Console.WriteLine(one.ToString("G"));
Console.WriteLine(two.ToString("G"));
Console.WriteLine(three.ToString("G"));
Para un valor decimal, la precisión predeterminada para la "G" especificador de formato es de 29 dígitos, y la notación de punto fijo siempre se utiliza cuando se omite la precisión, por lo que este es el mismo que "0. #### ######################### ".
A diferencia de "0. ##" se mostrará todos los decimales significativos (un valor decimal no puede tener más de 29 cifras decimales).
El "G29" especificador de formato es similar, pero se puede utilizar la notación científica si más compacta (ver Standard numeric format strings).
Por lo tanto:
decimal d = 0.0000000000000000000012M;
Console.WriteLine(d.ToString("G")); // Uses fixed-point notation
Console.WriteLine(d.ToString("G29"); // Uses scientific notation
Su importante recordar Tienes que incluir tantos signos # como se desea mostrar cifras decimales si se utiliza este método. – AlexCuse