"子串"是一个数值

Col*_*ury 3 c#

在C#中,"子串"(缺少更好的词)的长值是什么的最好方法.

我需要计算预告片记录的帐号总和,但只需要16个最不重要的字符.

我能够通过将值转换为字符串来实现这一点,但想知道是否有更好的方法可以完成它.

long number = 1234567890123456789L;
const long _MAX_LENGTH = 9999999999999999L;

if (number > _MAX_LENGTH)
{
  string strNumber = number.ToString();
  number = Convert.ToInt64(strNumber.Substring(strNumber.Length - 16));
}
Run Code Online (Sandbox Code Playgroud)

这将返回值4567890123456789.

Dar*_*mas 8

你可以这样做:

long number = 1234567890123456789L;
long countSignificant = 16;
long leastSignificant = number % (long) Math.Pow(10, countSignificant);
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?好吧,如果你除以10,你会丢掉最后一位数,对吧?其余的将是最后一位数?100,1000和100也是如此Math.Pow(1, n).

让我们看看最不重要的数字,因为我们可以在脑海中做到这一点:

1234除以10是123余数4

在c#中,那将是:

1234 / 10 == 123;
1234 % 10 == 4;
Run Code Online (Sandbox Code Playgroud)

因此,下一步是弄清楚如何获得最后n位有效数字.事实证明,这与除以10 的幂相同.由于c#没有指数运算符(比如**在python中),我们使用库函数:

Math.Pow(10, 4) == 1000.0; // oops: a float!
Run Code Online (Sandbox Code Playgroud)

我们需要将其重新投入:

(long) Math.Pow(10, 4) == 1000;
Run Code Online (Sandbox Code Playgroud)

我想现在你已经拥有了所有的功能来创造你自己的好功能;)


Tho*_*mar 7

您可以使用modulo(%C#中的运算符).例如:

123456 % 100000 = 23456
Run Code Online (Sandbox Code Playgroud)

要么

123456 % 1000 = 456
Run Code Online (Sandbox Code Playgroud)

作为一个快速指南,我记得你得到的数字与除数中的零一样多.或者,反之亦然,除数需要尽可能多的零以保持数字.

所以在你的情况下你需要:

long number = 1234567890123456789L;
long divisor = 10000000000000000L;
long result = number % divisor;
Run Code Online (Sandbox Code Playgroud)