代码之家  ›  专栏  ›  技术社区  ›  brickner

biginteger.toString()返回50个以上的十进制数字

  •  1
  • brickner  · 技术社区  · 15 年前

    我用的是.NET 4 System.Numerics.BigInteger Structure 而且我得到的结果与文档不同。

    在文件中 BigInteger.ToString() Method 它说:

    toString()方法支持50 精度的十进制数字。也就是说, 如果biginteger值大于 50位,只有50位 有效数字保留在 输出字符串;所有其他数字 替换为零。

    我有一些需要60位小数的代码 BigInteger 并将其转换为 string . 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"));
    

    所有断言都通过。

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

    1 回复  |  直到 15 年前
        1
  •  3
  •   Nick Craver    15 年前

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

    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"