Как предотвратить преобразование Long/Int64 ToString() в экспоненциальный формат?

Запуск вариантов сборки .NET 4.6 и x64.

Параметр формата ToString(), по-видимому, не работает для чисел длиной более 15 цифр, поскольку он преобразует их в экспоненциальный формат.

Что я пробовал до сих пор:

long.ToString("#");
long.ToString("G");
long.ToString("0");
long.ToString("#,#");
long.ToString("0,0");

Единственное, что частично работает, это:

long.ToString("0,0");  //Ex.) 5,149,673,432,170,230

Однако я бы предпочел обычный номер. Я бы предпочел не использовать:

String.Replace(",", "");

Какие-либо предложения?

Изменить: решение уже было опробовано. .ToString("0")

Запустил полный ремонт VS2015 и очистил мое решение. Теперь он работает, как задумано.


person HouseCat    schedule 07.08.2015    source источник
comment
попробуй ToString(CultureInfo.InvariantCulture).   -  person Cory Nelson    schedule 07.08.2015
comment
Проверим это в ближайшее время.   -  person HouseCat    schedule 07.08.2015


Ответы (3)


Вы можете использовать формат «0».

long num = 1234567890123456789;
System.Diagnostics.Debug.WriteLine("Str=" + num.ToString("0"));

Выход: Str=1234567890123456789

person Steve Wong    schedule 07.08.2015
comment
@RagingCain Странно. Можете ли вы добавить это утверждение в пример кода? System.Diagnostics.Debug.Assert(num.ToString(0) == 1234567890123456789); - person Steve Wong; 07.08.2015
comment
Я ремонтирую свою Visual Studio, я думаю, что что-то не так. Скоро прокомментирую, если это сработало. - person HouseCat; 07.08.2015
comment
@RagingCain возможно ли, что вы используете/просматриваете эту строку где-то еще (например, в Excel) и меняете формат? - person Steve Wong; 07.08.2015
comment
Ничего подобного, просто простое текстовое поле без максимального размера символов. Ремонт еще идет. BigInteger работал. Просто Лонг сломался. - person HouseCat; 07.08.2015
comment
Мне нравится предложение @Steve Wong. См. superuser.com/questions/413226/ - person Michael Levy; 07.08.2015
comment
подожди. Какое текстовое поле? Это на веб-странице или в приложении формы? Какое текстовое поле вы используете для отображения этого? Если вы проверите строку в отладчике, она неправильно отформатирована? Возможно, текстовое поле форматирует его так. - person Michael Levy; 07.08.2015
comment
Он работает с чистым решением и полным восстановлением Visual Studio. .ToString(0) был правильным вариантом формата строки. - person HouseCat; 07.08.2015

Если у вас действительно есть long или ulong, то

string s = long.MaxValue.ToString() ;

возвращает ожидаемую строку "9223372036854775807".

Пока

string s = ulong.MaxValue.ToString() ;

возвращает ожидаемую строку "18446744073709551615".

Вы уверены, что имеете дело с long, а не с каким-то типом с плавающей запятой?

person Nicholas Carey    schedule 07.08.2015
comment
Да, похоже, что полный ремонт VS2015 решил мою проблему. ToString(0) теперь у меня работает корректно. - person HouseCat; 07.08.2015

Int64 bigNumber =  9223372036854775806L;
String s1 = String.Format("{0:g}", bigNumber);
String s2 = bigNumber.ToString("G");
Debug.WriteLine("s1 = {0}, s2 = {1}", s1, s2);

пишет:

s1 = 9223372036854775806, s2 = 9223372036854775806

person Michael Levy    schedule 07.08.2015