在.NET中,BigInteger.ToString()返回的字符串是否反映了BigInteger的完整精度?

Jep*_*sen 8 .net c# biginteger

直到今天,我(隐式)假设当我输出一个BigIntegervia参数无效(重写)实例方法时BigInteger.ToString(),返回字符串将包含我的"大"整数的完整和精确的十进制表示.

但在MSDN文档页面上,我读到:

"在大多数情况下,ToString方法支持50个十进制数字的精度.也就是说,如果BigInteger值超过50位,输出字符串中只保留50个最高有效数字;所有其他数字都替换为零.但是,BigInteger支持"R"标准格式说明符,用于往返数值.由ToString(String)方法返回的带有"R"格式字符串的字符串保留整个BigInteger值,然后可以使用ParseTryParse方法恢复其原始值而不会丢失任何数据"._

但是,我还没有找到一个myBigInt.ToString()与之不同的例子myBigInt.ToString("R").在我的框架版本(.NET 4.0 SP1)中,上述页面中的备注示例并未提供示例.(此外"G""R"似乎是等效BigInteger).

假设无参数ToString()给出整数的完整十进制扩展是否安全?他们是否改变了框架行为,或者上面提到的示例代码总是错误的?

注意:在我写完这个之后,SO向我展示了这个"类似的问题"2984184,但是我仍然在提交我的问题,因为2984184的答案并没有真正规避零参数的ToString()工作原理.

由自己编辑:

ToString(String)当我的问题(主要是)关于ToString()过载时,我在MSDN 上链接过载有点不合适.因此,另请参阅MSDN,BigInteger.ToString()其中提到了50位数限制,但未提供超过50位数的示例.

Aak*_*shM 5

反编译.NET 4.0框架会给出这一系列调用:

BigInteger.ToString
BigNumber.FormatBigInteger( ... format:= null ...)
BigNumber.ParseFormatSpecifier(format ...)
Run Code Online (Sandbox Code Playgroud)

我们拥有的

  if (string.IsNullOrEmpty(format))
    return 'R';
Run Code Online (Sandbox Code Playgroud)

所以可以看出,在这个实现中,ToString()相当于ToString("R").但是,正如@PaulPhillips指出的那样,鉴于文档(稍微有点混乱)明确否定了这一点的可靠性,我认为最安全(并且无论如何最自我记录)的事情是当你使用"R"时需要完全保真.