Это на самом деле не может быть сделано. Во всяком случае, нетривиально и не использовать Doubles
. Двойные числа просто не имеют достаточно цифр, чтобы вы могли отобразить любое число, поэтому, вероятно, научная нотация используется для отображения значений, когда вы просто вызываете .ToString ()
Результат, который мы получаем для двойников, находится в научной записи, потому что это лучше представляет значение. Используя этот код в качестве примера ....
double testValue = 9123456789012345678.234;
string formatStr = "{0:0.####################################################},{1}";
Debug.WriteLine(String.Format(formatStr, testValue, testValue));
Вывод, который мы получаем:
9123456789012350000,9.12345678901235E + 18
Не фактическое число, с которого мы начали. Если вы игнорируете действительно большие цифры, я думаю, вы обнаружите, что опубликованные вами примеры не требуют от вас ничего делать.
Debug.WriteLine(12.0d + " == " + String.Format("{0} == {1:0.########################}", 12.0d, 12.0d));
Debug.WriteLine(12.20300d + " == " + String.Format("{0} == {1:0.########################}", 12.20300d, 12.20300d));
Debug.WriteLine(-00.2900d + " == " + String.Format("{0} == {1:0.########################}", -00.2900d, -00.2900d));
Debug.WriteLine(99999999999999999999999d + " == " + String.Format("{0} == {1:0.########################}", 99999999999999999999999d, 99999999999999999999999d));
12 == 12 == 12
12.203 == 12.203 == 12.203
-0.29 == -0.29 == -0.29
1E+23 == 1E+23 == 100000000000000000000000
В первых трех примерах, независимо от того, отображаете ли вы его непосредственно с помощью WriteLine, используете String.Format без форматной строки или "0. ########", вывод - это то, что вам нужно. Единственная ситуация, когда значение отличается, - это четвертый случай, когда поведение по умолчанию - научная запись. Изменение этого поведения даст вам цифры с дополнительными нулями, где вы ожидаете значимых чисел; но это может быть достигнуто, как Самир показал со строкой формата.