如何防止Long/Int64 ToString()转换为指数格式?

4

运行.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的完整修复,并清理了我的解决方案。现在它按预期工作。


尝试使用 ToString(CultureInfo.InvariantCulture) - Cory Nelson
很快就会测试这个。 - HouseCat
3个回答

4
您可以使用“0”格式。
long num = 1234567890123456789;
System.Diagnostics.Debug.WriteLine("Str=" + num.ToString("0"));

输出:Str=1234567890123456789


1
@RagingCain,你是否可能在其他地方(例如Excel)使用/查看此字符串并更改了格式? - Steve Wong
没有什么特别的,只是一个没有字符大小限制的简单文本框。修复仍在运行中。BigInteger 可以工作。只有 Long 是“损坏的”。 - HouseCat
我喜欢@Steve Wong的建议。请参见http://superuser.com/questions/413226/why-does-excel-treat-long-numeric-strings-as-scientific-notation-even-after-chan。 - Michael Levy
1
等一下。哪个文本框?这是在网页还是表单应用程序中?您使用哪个文本框来显示它?如果您在调试器中检查字符串,是否格式不正确?也许文本框正在以此方式进行格式化。 - Michael Levy
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - HouseCat
显示剩余2条评论

1
如果您实际上有一个longulong,那么:
string s = long.MaxValue.ToString() ;

返回预期字符串"9223372036854775807"

然而

string s = ulong.MaxValue.ToString() ;

返回预期字符串"18446744073709551615"

您确定处理的是long而不是某种浮点类型吗?


是的,完整修复VS2015解决了我的问题。ToString("0")现在对我起作用了。 - HouseCat

0
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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接