【发布时间】:2018-06-01 02:37:25
【问题描述】:
我正在使用 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;
}
【问题讨论】:
-
为什么不能使用字符串插值?为什么输出必须是数字?
-
@Greg 就组件而言,我最终需要使用数字来计算网格的其他部分(300,40,90,12)。
-
% 运算符呢?
-
想想你在做什么,把代码变成现实。我们的数值系统具有位值不是很好吗?您可以从小数点读取任何单个数字和零索引,然后将该数字乘以 10 到该索引的幂?
-
@DavidRodriguez 我已经修改了我之前的答案,以便按照您的要求实际生成一个网格;这个花了一点时间!在您最终不得不这样做之前,这是您希望轻松完成的事情之一。
标签: c# unity3d math multiplication