1

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

BigInteger.ToString() 方法的文档中它说:

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"));

所有的断言都通过了。

文档中引用的部分到底是什么意思?

4

1 回答 1

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"

例外是将其格式化为"R",它给出了原始的往返值:

v.ToString("R"); "123456789012345678901234567890123456789012345678901234567891"
于 2010-06-06T12:54:53.503 回答