为何我的int类型变量TCoins被识别为double?该如何修复?
问题原因及解决方法
- 问题根源:
Math.Pow()的返回值是double类型,当int类型的TCoins和它做运算时,C#会自动把int转成double,运算结果也是double,这时候再赋值回int变量就会触发类型不匹配的提示。 - 解决方法:
- 强制转换运算结果为int
因为你的花费计算结果是整数(10的整数次幂乘整数),可以直接把Math.Pow的运算结果转成int:if(Answer == "S" && TCoins >= (int)((S + 1) * Math.Pow(10, S+1))) { TCoins = TCoins - (int)((S + 1) * Math.Pow(10, S+1)); S++; } - 用整数运算替代
Math.Pow
完全避免浮点类型的参与,更安全:// 先计算10的(S+1)次方,用整数循环实现 int powerOf10 = 1; for (int i = 0; i < S + 1; i++) { powerOf10 *= 10; } int cost = (S + 1) * powerOf10; if (Answer == "S" && TCoins >= cost) { TCoins -= cost; S++; } - 可选优化:如果金币数量可能超过int的最大值(2147483647),可以把
TCoins的类型改成long,防止溢出。
- 强制转换运算结果为int
内容的提问来源于stack exchange,提问作者fernando
相关产品推荐
相关产品推荐

