@@ -482,21 +482,16 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
482482 }
483483 }
484484
485- internal class Function_PERCENTRANK : Function_N
485+ internal class Function_PERCENTRANK : Function_3
486486 {
487- public Function_PERCENTRANK ( FunctionBase [ ] funcs ) : base ( funcs )
487+ public Function_PERCENTRANK ( FunctionBase func1 , FunctionBase func2 , FunctionBase func3 ) : base ( func1 , func2 , func3 )
488488 {
489489 }
490490
491491 public override Operand Calculate ( AlgorithmEngine work )
492492 {
493- var args = new List < Operand > ( ) ;
494- foreach ( var item in funcs ) { var aa = item . Calculate ( work ) ; if ( aa . IsError ) { return aa ; } args . Add ( aa ) ; }
495-
496- var args1 = args [ 0 ] . ToArray ( "Function '{0}' parameter {1} is error!" , "PercentRank" , 1 ) ;
497- if ( args1 . IsError ) { return args1 ; }
498- var args2 = args [ 1 ] . ToNumber ( "Function '{0}' parameter {1} is error!" , "PercentRank" , 2 ) ;
499- if ( args2 . IsError ) { return args2 ; }
493+ var args1 = func1 . Calculate ( work ) ; if ( args1 . Type != OperandType . ARRARY ) { args1 = args1 . ToArray ( "Function '{0}' parameter {1} is error!" , "PercentRank" , 1 ) ; if ( args1 . IsError ) { return args1 ; } }
494+ var args2 = func2 . Calculate ( work ) ; if ( args2 . Type != OperandType . NUMBER ) { args2 = args2 . ToNumber ( "Function '{0}' parameter {1} is error!" , "PercentRank" , 2 ) ; if ( args2 . IsError ) { return args2 ; } }
500495
501496 List < decimal > list = new List < decimal > ( ) ;
502497 var o = FunctionUtil . F_base_GetList ( args1 , list ) ;
@@ -505,9 +500,8 @@ public override Operand Calculate(AlgorithmEngine work)
505500 var k = args2 . NumberValue ;
506501 var v = ExcelFunctions . PercentRank ( list . Select ( q => ( double ) q ) . ToArray ( ) , ( double ) k ) ;
507502 var d = 3 ;
508- if ( args . Count == 3 ) {
509- var args3 = args [ 2 ] . ToNumber ( "Function '{0}' parameter {1} is error!" , "PercentRank" , 3 ) ;
510- if ( args3 . IsError ) { return args3 ; }
503+ if ( func3 != null ) {
504+ var args3 = func2 . Calculate ( work ) ; if ( args3 . Type != OperandType . NUMBER ) { args3 = args3 . ToNumber ( "Function '{0}' parameter {1} is error!" , "PercentRank" , 3 ) ; if ( args3 . IsError ) { return args3 ; } }
511505 d = args3 . IntValue ;
512506 }
513507 return Operand . Create ( Math . Round ( v , d , MidpointRounding . AwayFromZero ) ) ;
0 commit comments