使用C#中的Convert.ToString方法,我只能将数字转换为以2、8、10或16为底的数字。是否可以使用c#.net4或4.5将以10为底的数字转换/计算为以7为底的数字?
您可以检查this blog对此提供了解决方案:
public static string DecimalToArbitrarySystem(long decimalNumber, int radix)
{
const int BitsInLong = 64;
const string Digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (radix < 2 || radix > Digits.Length)
throw new ArgumentException("The radix must be >= 2 and <= " +
Digits.Length.ToString());
if (decimalNumber == 0)
return "0";
int index = BitsInLong - 1;
long currentNumber = Math.Abs(decimalNumber);
char[] charArray = new char[BitsInLong];
while (currentNumber != 0)
{
int remainder = (int)(currentNumber % radix);
charArray[index--] = Digits[remainder];
currentNumber = currentNumber / radix;
}
string result = new String(charArray, index + 1, BitsInLong - index - 1);
if (decimalNumber < 0)
{
result = "-" + result;
}
return result;
}
然后像这样称呼它>
Console.WriteLine("Base 7: " + DecimalToArbitrarySystem(number, 7));
我试图将此解决方案转换为Vb.Net,并且使用所有C#至VB.Net在线转换器的结果始终是错误的。问题在于整数除法。(您可以尝试以5为基数计算320(C#= 2240是可以的。使用到VB.Net的转换,结果始终是13340,这是错误的)。