有没有一种方法可以舍入或ceil BigInteger

本文关键字:舍入 ceil BigInteger 方法 一种 有没有 | 更新日期: 2023-09-27 18:26:14

我有一个BigIntiger,比如1234567890,我正在寻找最快的方法将其转化为以下内容之一:

  • 2000000000
  • 130000000
  • 1234567900

有没有一种方法可以舍入或ceil BigInteger

我不认为有内置的方法可以做到这一点

获得"无余数"的最简单方法是按余数减少值:

"四舍五入"不给出13:的余数

  var x = new BigInteger(123456);
  var roundedTo13 = x - (x % 13);

或至100:

  var roundedTo100 = x - (x % 100);
  Console.WriteLine(roundedTo100);

如果您需要更传统意义上的舍入,请检查余数是否大于要舍入的值和要舍入的数字的符号。若余数(x%100)的值大于一半,则需要添加/减去100。

另一种方法是拆分字符串。虽然可能存在性能问题,但结果是可以的

    //n=1, 2, 8 to check for your example
    static long F(long num, int n)
    {
        string all = num.ToString();
        long headn = Convert.ToInt64(all.Substring(0, n)) + 1;
        return (long)(headn * Math.Pow(10, all.Length - n));
    }