C#中整数除法导致结果为0的异常问题求助
问题解决:C#程序输出比值为0的原因及修复方案
核心问题
你输入1、2、3、4、5后得到比值0,是因为整数除法的截断特性:
- 偶数总和是2+4=6,奇数总和是1+3+5=9
- 代码里
evennumber和oddnumber都是int类型,6/9作为整数运算会直接舍弃小数部分,结果为0,再赋值给float类型的ratio就变成0.0
代码错误点及修复
除法运算错误:
原代码中ratio = evennumber/oddnumber;两个int相除结果还是int,需要将其中一个操作数强制转为浮点数,让运算按浮点数规则执行:ratio = (float)evennumber / oddnumber;字符串拼接语法错误:
原代码Console.WriteLine("Enter" + i ". number : ");缺少加号,会导致编译失败,修正为:Console.WriteLine("Enter " + i + " . number : ");
修正后的完整代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Project3 { internal class Program { static void Main(string[] args) { //variable assigment int evennumber = 0; int oddnumber = 0; float ratio; //its for get numbers for(int i = 1; i <= 5; i++) { Console.WriteLine("Enter " + i + " . number : "); int number=Convert.ToInt32(Console.ReadLine()); //its for determine even and odd number if (number%2 == 0) { evennumber = evennumber + number; } else { oddnumber = oddnumber + number; } } ratio = (float)evennumber / oddnumber; Console.WriteLine("Ratio : " + ratio); Console.Read(); } } }
补充说明
C#中不同数值类型运算时,会遵循类型提升规则:当整数和浮点数运算时,整数会自动转为浮点数,运算结果也是浮点数。所以只要把其中一个int变量转为float,就能得到正确的小数比值。
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

