Actionscript 3 ActionScript 3中的中值计算

Actionscript 3 ActionScript 3中的中值计算,actionscript-3,Actionscript 3,我有一个数字数组,我想计算中值。 当数组为奇数时,计算正常,当出现偶数奇数时 private var numbers:String = "2,5,3,4,6,1"; private var array:Array = numbers.split(","); private function getMedian(array:Array):Number { var sortnums:Array = array.sort(Array.NUMERIC); var length:Number = s

我有一个数字数组,我想计算中值。 当数组为奇数时,计算正常,当出现偶数奇数时

private var numbers:String = "2,5,3,4,6,1";
private var array:Array = numbers.split(",");

private function getMedian(array:Array):Number {
 var sortnums:Array = array.sort(Array.NUMERIC);
 var length:Number = sortnums.length;
 var mid1:Number; var mid2:Number; var median:Number;

 if(length % 2 == 0){
     mid1 = length / 2; trace("mid1: "+mid1);
 mid2= ((length - 1) / 2)-0.5; trace("mid2: "+mid2);
 trace ("mid1: "+sortnums[mid1]+", mid2: "+sortnums[mid2]);
 median = (sortnums[mid1] + sortnums[mid2]) / 2;
 }else{
 mid1 = (length / 2)-0.5
 median = sortnums[mid1]
 }
 trace (median);
 return median;
}
结果是21.5,但应该是3.5

mid1和mid2是阵列中的一个位置

有人能帮忙吗?

试试这个(为了整洁):

顺便说一句,我相当肯定您的代码运行良好,问题是您在这里将其作为字符串串联而不是数字和:

median = (sortnums[mid1] + sortnums[mid2]) / 2;
这意味着您实际上是将字符串
1.5
添加到
2
上,得到
21.5
而不是
3.5

尝试修改代码,使其如下所示:

median = (Number(sortnums[mid1]) + Number(sortnums[mid2])) / 2;
试试这个(为了整洁):

顺便说一句,我相当肯定您的代码运行良好,问题是您在这里将其作为字符串串联而不是数字和:

median = (sortnums[mid1] + sortnums[mid2]) / 2;
这意味着您实际上是将字符串
1.5
添加到
2
上,得到
21.5
而不是
3.5

尝试修改代码,使其如下所示:

median = (Number(sortnums[mid1]) + Number(sortnums[mid2])) / 2;

请注意,在进行计算之前,您应该对字符串值进行清理并将其转换为数字值。@joncys是的,这当然是首选。我的初始函数需要一个已经包含数字的数组来完成这个任务。[在]Marty-那个评论必须作为对OP帖子的评论,而不是你的答案,我的错误。(你怎么用空格引用名字?!)@joncys认为你只是截断了空格,即MartyWallace:)在一个完整的旁注中,你应该在计算之前清理并将字符串值转换为数字值。@joncys是的,这当然是首选。我的初始函数需要一个已经包含数字的数组来完成这个任务。[在]Marty-那个评论必须作为对OP帖子的评论,而不是你的答案,我的错误。(你怎么用空格引用名字?!)@joncys认为你只是截断了空格,即MartyWallace:)