我正在使用.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"));
所有断言都通过。
文档的引用部分究竟是什么意思?
答案 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"