BigInteger.ToString() 返回超过 50 位十进制数字
我正在使用 .NET 4 System.Numerics .BigInteger Structure 并且我得到的结果与文档不同。
在 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"));
所有断言都通过。
文档中引用的部分到底是什么意思?
I'm using .NET 4 System.Numerics.BigInteger Structure and I'm getting results different from the documentation.
In the documentation of BigInteger.ToString() Method It says:
The ToString() method supports 50
decimal digits of precision. That is,
if the BigInteger value has more than
50 digits, only the 50 most
significant digits are preserved in
the output string; all other digits
are replaced with zeros.
I have some code that takes a 60 decimal digits BigInteger
and converts it to a string
. The 60 significant decimal digits string
didn't lose any significant digits:
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"));
All the asserts pass.
What exactly does the quoted part of the documentation mean?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里的文档有点不清楚,这个限制仅在格式化字符串时适用,例如:
例外情况是将其格式化为
"R"
,这给出了原始的往返值:The documentation is a little unclear here, this limit only applies when formatting the string, for example:
The exception is formatting it as
"R"
, which gives the original round-tripped value: