BigInteger:积分常数太大
BigInteger: Integral Constant is too large
我想将一个 BigInteger 值 (111111222222333333444444555555) 拆分为一个包含 5 个元素的数组(基本上是将一个大数字拆分为不同的硬币)。它们通过向后计数和每 6 个数字进行 SubStringing 来拆分。我正在为一个统一游戏构建它。
这意味着,运行 函数之后的测试数组应该是 {111111,222222,333333,444444,555555} 的数组。
在我的测试中我调用
ToRegularCoins(111111222222333333444444555555, test);
其中 test 是一个 int[5] 数组。
函数如下:
public void ToRegularCoins(BigInteger coinsValue, int[] targetArray)
{
string coinsValueString = coinsValue.ToString();
string[] coinsValueStringArray = new string[5];
for (int i = 0; i < 5; i++)
{
try
{
coinsValueStringArray[i] = coinsValueString.Substring(coinsValueString.Length - 6);
coinsValueString = coinsValueString.Remove(coinsValueString.Length - 6, 6);
Debug.Log("Index: " + i + "coinsValueString: " + coinsValueString);
}
catch(ArgumentOutOfRangeException)
{
Debug.Log("Exception in Index: " + i);
coinsValueStringArray[i] = coinsValueString;
coinsValueString = "";
}
try
{
targetArray[i] = int.Parse(coinsValueStringArray[i]); // Turn string into Int at Array's index
}
catch(FormatException)
{
Debug.Log("No Coins of Index: " + i);
}
}
}
运行 我的脚本我得到 XY.cs(32,24): error CS1021: Integral constant is too large
我该如何解决这个错误?我这样做可能比我应该做的更复杂吗?
像这样声明变量。
var coinsValue = BigInteger.Parse("111111222222333333444444555555");
如果仔细查看代码,ToRegularCoins()
函数的第一行将 BigInteger
转换为 string
,因此您可以不用将值解析为 BigInteger
直接将字符串传递给 ToRegularCoins()
函数
//Replace coinValue to coinValueString.
public void ToRegularCoins(string coinsValueString, int[] targetArray)
{
//No need to convert input parameter to string, as it is already in string format
string[] coinsValueStringArray = new string[5];
for (int i = 0; i < 5; i++)
{
try
{
coinsValueStringArray[i] = coinsValueString.Substring(coinsValueString.Length - 6);
coinsValueString = coinsValueString.Remove(coinsValueString.Length - 6, 6);
Debug.Log("Index: " + i + "coinsValueString: " + coinsValueString);
}
catch(ArgumentOutOfRangeException)
{
Debug.Log("Exception in Index: " + i);
coinsValueStringArray[i] = coinsValueString;
coinsValueString = "";
}
try
{
targetArray[i] = int.Parse(coinsValueStringArray[i]); // Turn string into Int at Array's index
}
catch(FormatException)
{
Debug.Log("No Coins of Index: " + i);
}
}
}
调用方法时,传递 string
而不是 BigInteger
。
ToRegularCoins("111111222222333333444444555555", test);
我想将一个 BigInteger 值 (111111222222333333444444555555) 拆分为一个包含 5 个元素的数组(基本上是将一个大数字拆分为不同的硬币)。它们通过向后计数和每 6 个数字进行 SubStringing 来拆分。我正在为一个统一游戏构建它。 这意味着,运行 函数之后的测试数组应该是 {111111,222222,333333,444444,555555} 的数组。
在我的测试中我调用
ToRegularCoins(111111222222333333444444555555, test);
其中 test 是一个 int[5] 数组。
函数如下:
public void ToRegularCoins(BigInteger coinsValue, int[] targetArray)
{
string coinsValueString = coinsValue.ToString();
string[] coinsValueStringArray = new string[5];
for (int i = 0; i < 5; i++)
{
try
{
coinsValueStringArray[i] = coinsValueString.Substring(coinsValueString.Length - 6);
coinsValueString = coinsValueString.Remove(coinsValueString.Length - 6, 6);
Debug.Log("Index: " + i + "coinsValueString: " + coinsValueString);
}
catch(ArgumentOutOfRangeException)
{
Debug.Log("Exception in Index: " + i);
coinsValueStringArray[i] = coinsValueString;
coinsValueString = "";
}
try
{
targetArray[i] = int.Parse(coinsValueStringArray[i]); // Turn string into Int at Array's index
}
catch(FormatException)
{
Debug.Log("No Coins of Index: " + i);
}
}
}
运行 我的脚本我得到 XY.cs(32,24): error CS1021: Integral constant is too large
我该如何解决这个错误?我这样做可能比我应该做的更复杂吗?
像这样声明变量。
var coinsValue = BigInteger.Parse("111111222222333333444444555555");
如果仔细查看代码,ToRegularCoins()
函数的第一行将 BigInteger
转换为 string
,因此您可以不用将值解析为 BigInteger
直接将字符串传递给 ToRegularCoins()
函数
//Replace coinValue to coinValueString.
public void ToRegularCoins(string coinsValueString, int[] targetArray)
{
//No need to convert input parameter to string, as it is already in string format
string[] coinsValueStringArray = new string[5];
for (int i = 0; i < 5; i++)
{
try
{
coinsValueStringArray[i] = coinsValueString.Substring(coinsValueString.Length - 6);
coinsValueString = coinsValueString.Remove(coinsValueString.Length - 6, 6);
Debug.Log("Index: " + i + "coinsValueString: " + coinsValueString);
}
catch(ArgumentOutOfRangeException)
{
Debug.Log("Exception in Index: " + i);
coinsValueStringArray[i] = coinsValueString;
coinsValueString = "";
}
try
{
targetArray[i] = int.Parse(coinsValueStringArray[i]); // Turn string into Int at Array's index
}
catch(FormatException)
{
Debug.Log("No Coins of Index: " + i);
}
}
}
调用方法时,传递 string
而不是 BigInteger
。
ToRegularCoins("111111222222333333444444555555", test);