.net 4.0 ToString()返回50个以上的十进制数字

.net 4.0 ToString()返回50个以上的十进制数字,.net-4.0,tostring,biginteger,.net 4.0,Tostring,Biginteger,我使用的是.NET4,得到的结果与文档不同 文件中说: ToString()方法支持50 精度的小数位数。就是, 如果BigInteger值的值大于 50位,最多50位 有效数字保留在中 输出字符串;所有其他数字 被替换为零 我有一些代码,它接受60位十进制数字biginger,并将其转换为字符串。60位有效十进制数字字符串没有丢失任何有效数字: const string vString = "123456789012345678901234567890123456789012345678901

我使用的是.NET4,得到的结果与文档不同

文件中说:

ToString()方法支持50 精度的小数位数。就是, 如果BigInteger值的值大于 50位,最多50位 有效数字保留在中 输出字符串;所有其他数字 被替换为零

我有一些代码,它接受60位十进制数字
biginger
,并将其转换为
字符串。60位有效十进制数字
字符串
没有丢失任何有效数字:

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"));
所有的断言都通过了


文档引用部分的确切含义是什么?

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

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"
,给出了原始往返值:

v.ToString("R"); "123456789012345678901234567890123456789012345678901234567891"

使用“G”{v.ToString(“G”)}进行格式化会得到相同的60位有效数字输出。什么格式只有50位?@brickner:我相信只有
g
r
会返回任何长度的完整原始值,但我不是100%确定,在我们的项目中很少使用这么大的数字。上面的字符串不能在我的机器上复制(.NET 4.5.2)。上述输出是由.NET4.0的官方最终版本(RTM)生成的吗?很难相信他们改变了这个功能。好像有点破了。也许您是使用.NET 4.0的beta版(即使最终版本已发布)进行上述输出的?有人能记录下这个功能是什么时候被更改的吗?这可能是文档中的一个bug。