BigInteger.ToString()返回超过50个十进制数字

时间:2010-06-06 12:40:14

标签: .net-4.0 tostring biginteger

我正在使用.NET 4 System.Numerics.BigInteger Structure,我得到的结果与文档不同。

BigInteger.ToString() Method的文档中说:

  

ToString()方法支持50   精度的十进制数字。那是,   如果BigInteger值超过   50位数,最多50位   有效数字保留在   输出字符串;所有其他数字   被替换为零。

我有一些代码需要60个十进制数BigInteger并将其转换为string。 60位有效小数string并没有失去任何有效数字:

const string vString = "123456789012345678901234567890123456789012345678901234567890";
Assert.AreEqual(60, vString.Length);
BigInteger v = BigInteger.Parse(vString);
Assert.AreEqual(60, v.ToString().Length);
Assert.AreEqual('9', v.ToString()[58]);
Assert.AreEqual('1', v.ToString()[0]);
Assert.AreEqual(vString, v.ToString());
Assert.AreEqual(vString, v.ToString("G"));

所有断言都通过。

文档的引用部分究竟是什么意思?

1 个答案:

答案 0 :(得分:3)

这里的文档有点不清楚,此限制仅适用于格式化字符串,例如:

v.ToString("0"); "123456789012345678901234567890123456789012345678900000000000"
v.ToString("n0"); "123,456,789,012,345,678,901,234,567,890,123,456,789,012,345,678,900,000,000,000"

The exception is formatting it as "R",它给出了原始的往返值:

v.ToString("R"); "123456789012345678901234567890123456789012345678901234567891"
相关问题