我正在使用 C# 在 Unity 游戏引擎中开发一个数学游戏,特别是一个可重复使用的组件,用于教授乘法的网格方法。例如,当给出数字 34 和 13 时,它应该生成一个 3X3 网格(乘数和被乘数位值的标题列和行,乘数和被乘数中的位数为 2X2)。看起来像这样的东西:
我的问题是我不知道提取数字位值的最佳方法(例如 34 -> 30 和 4)。我正在考虑将它转换为字符串,根据其索引将 0 添加到较高的位值,然后将其转换回 int,但这似乎是一个糟糕的解决方案。有更好的方法吗?
注意:我几乎只处理正整数,但位值的数量可能会有所不同。
感谢所有回答的人!我认为发布我用所有回复构建的特定于 Unity 的解决方案可能会有所帮助:
List<int> GetPlaceValues(int num) {
List<int> placeValues = new List<int>();
while (num > 0) {
placeValues.Add(num % 10);
num /= 10;
}
for(int i = 0;i<placeValues.Count;i++) {
placeValues[i] *= (int)Mathf.Pow(10, i);
}
placeValues.Reverse();
return placeValues;
}
最佳答案
利用我们的数字系统的工作方式。这是一个基本示例:
string test = "12034";
for (int i = 0; i < test.Length; ++i) {
int digit = test[test.Length - i - 1] - '0';
digit *= (int)Math.Pow(10, i);
Console.WriteLine("digit = " + digit);
}
基本上,它从最右边的数字开始读取(假设输入是一个整数),并使用我们系统工作方式的方便位值来计算数字的含义。
test.Length - i - 1
将最右侧视为 0,并在左侧索引正值。
- '0'
将 '0' 的编码值转换为实际数字。
关于c# - 如何提取数字的位值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873772/