Подтвердить что ты не робот

Как получить значение float без включения экспоненциальной нотации

В С# можно ли выполнить ToString для float и получить значение без использования экспонент?

Например, рассмотрим следующее:

float dummy;

dummy = 0.000006F;

Console.WriteLine(dummy.ToString());

Это дает выход

6E-06

Однако, я был

0.000006

Самое близкое, что я мог найти, это использовать квалификатор "F", однако мне нужно указать количество десятичных знаков, иначе значение округляется.

Есть ли способ сделать это автоматически или мне нужно сделать загрузку фанковой логики либо для обрезания нулей, либо для определения количества требуемых десятичных знаков.

Спасибо,
Ричард Мосс

4b9b3361

Ответ 1

Попробуйте это

Console.WriteLine(dummy.ToString("F"));

Вы также можете указать количество знаков после запятой. Например, F5, F3 и т.д.

Кроме того, вы можете проверить спецификатор специального формата

Console.WriteLine(dummy.ToString("0.#########"));

Ответ 2

string dum = string.Format("{0:f99}",dummy).TrimEnd('0');
if (dum.EndsWith(",")) dum = dum.Remove(dum.Length - 1);

Ответ 3

Без дополнительной информации о предыстории это трудно сказать - но похоже, что вы хотите десятичную семантику. Так почему бы не использовать тип decimal вместо этого?

decimal dummy;
dummy = 0.000006M;

Десятичный тип более точен при представлении десятичных чисел, чем float или double, но он не так эффективен. Подробнее см. здесь.

Ответ 4

Console.WriteLine(dummy.ToString("N5"));

где 5 - его число после запятой

Ответ 5

float dummy = 0.000006F;
Console.WriteLine(dummy.ToString("0." + new string('#', 60)));

Если вы будете делать это много, тогда имеет смысл хранить строку формата в поле/свойство static где-то и повторно использовать его, а не каждый раз создавать новый string:

private static readonly string _allFloatDigits = "0." + new string('#', 60);

// ...

float dummy = 0.000006F;
Console.WriteLine(dummy.ToString(_allFloatDigits));