数组值无法生成double值:C#中double类型平均值为整数的问题排查
问题原因与修复
平均值显示为整数的核心原因
这是C#整数除法规则导致的:当两个整数类型的操作数做除法时,结果会自动丢掉小数部分,只保留整数。
看你代码里的关键行:
double average = temp.Sum()/5;
temp是int[]数组,temp.Sum()返回的是整数类型的总和(比如你输入的五个数总和是428)5也是整数- 所以
428/5执行的是整数除法,结果直接取整为85,之后这个整数被转成double类型的85.0赋值给average,最终输出自然是85,而非预期的85.6。
"Array values can't produce a double value"提示的由来
这个提示本质和上面的问题是一回事:你的计算全程都是整数运算,最后只是把整数结果转成double,编译器会提示你——整个运算过程没有产生double类型的值,只是做了类型转换,所以出现这个提示。
快速修复方案
只要把除法里的任意一个操作数改成double类型,就能触发浮点数除法,保留小数部分:
// 方案1:把总和转成double double average = (double)temp.Sum() / 5; // 方案2:用小数形式的除数 double average = temp.Sum() / 5.0; // 方案3:先把数组元素转成double再求和 double average = temp.Select(x => (double)x).Sum() / 5;
内容的提问来源于stack exchange,提问作者Javanese Python
相关产品推荐
相关产品推荐

