Как получить значение с плавающей точкой без экспоненциальной записи - PullRequest
12 голосов
/ 21 сентября 2010

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

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

float dummy;

dummy = 0.000006F;

Console.WriteLine(dummy.ToString());

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

6E-06

Однако я был

0.000006

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

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

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

Ответы [ 5 ]

19 голосов
/ 21 сентября 2010

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

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

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

Также вы можете проверить спецификатор пользовательского формата

Console.WriteLine(dummy.ToString("0.#########"));
3 голосов
/ 21 сентября 2010
string dum = string.Format("{0:f99}",dummy).TrimEnd('0');
if (dum.EndsWith(",")) dum = dum.Remove(dum.Length - 1);
2 голосов
/ 21 сентября 2010

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

decimal dummy;
dummy = 0.000006M;

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

1 голос
/ 21 сентября 2010
Console.WriteLine(dummy.ToString("N5"));

где 5 - количество десятичных знаков

0 голосов
/ 21 сентября 2010
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));
...