Commit ada61c72 authored by GoshaZotov's avatar GoshaZotov

add CSCH formula

parent 9528c948
...@@ -726,6 +726,44 @@ $( function () { ...@@ -726,6 +726,44 @@ $( function () {
strictEqual( oParser.calculate().getValue(), "#VALUE!" ); strictEqual( oParser.calculate().getValue(), "#VALUE!" );
} ); } );
test( "Test: \"CSCH(1.5)\"", function () {
oParser = new parserFormula( 'CSCH(1.5)', "A1", ws );
ok( oParser.parse() );
strictEqual( oParser.calculate().getValue().toFixed(4) - 0, 0.4696 );
} );
test( "Test: \"CSCH(0)\"", function () {
oParser = new parserFormula( 'CSCH(0)', "A1", ws );
ok( oParser.parse() );
strictEqual( oParser.calculate().getValue(), "#DIV/0!" );
} );
//> Math.pow(2, 27)
test( "Test: \"CSCH(1000000000)\"", function () {
oParser = new parserFormula( 'CSCH(1000000000)', "A1", ws );
ok( oParser.parse() );
strictEqual( oParser.calculate().getValue(), 0 );
} );
//ABS > Math.pow(2, 27)
test( "Test: \"CSCH(-1000000000)\"", function () {
oParser = new parserFormula( 'CSCH(-1000000000)', "A1", ws );
ok( oParser.parse() );
strictEqual( oParser.calculate().getValue(), 0 );
} );
test( "Test: \"CSCH(test)\"", function () {
oParser = new parserFormula( 'CSCH(test)', "A1", ws );
ok( oParser.parse() );
strictEqual( oParser.calculate().getValue(), "#NAME?" );
} );
test( "Test: \"CSCH('test')\"", function () {
oParser = new parserFormula( 'CSCH("test")', "A1", ws );
ok( oParser.parse() );
strictEqual( oParser.calculate().getValue(), "#VALUE!" );
} );
test( "Test: \"ARABIC('LVII')\"", function () { test( "Test: \"ARABIC('LVII')\"", function () {
oParser = new parserFormula( 'ARABIC("LVII")', "A1", ws ); oParser = new parserFormula( 'ARABIC("LVII")', "A1", ws );
ok( oParser.parse() ); ok( oParser.parse() );
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
cFormulaFunctionGroup['Financial'].push(cPDURATION, cRRI); cFormulaFunctionGroup['Financial'].push(cPDURATION, cRRI);
cFormulaFunctionGroup['Mathematic'] = cFormulaFunctionGroup['Mathematic'] || []; cFormulaFunctionGroup['Mathematic'] = cFormulaFunctionGroup['Mathematic'] || [];
cFormulaFunctionGroup['Mathematic'].push(cAGGREGATE, cBASE, cCEILING_MATH, cCEILING_PRECISE, cFormulaFunctionGroup['Mathematic'].push(cAGGREGATE, cBASE, cCEILING_MATH, cCEILING_PRECISE,
cCOMBINA, cCSCH, cDECIMAL, cFLOOR_MATH, cFLOOR_PRECISE, cMUNIT, cSEC, cSECH); cCOMBINA, cDECIMAL, cFLOOR_MATH, cFLOOR_PRECISE, cMUNIT, cSEC, cSECH);
cFormulaFunctionGroup['LookupAndReference'] = cFormulaFunctionGroup['LookupAndReference'] || []; cFormulaFunctionGroup['LookupAndReference'] = cFormulaFunctionGroup['LookupAndReference'] || [];
cFormulaFunctionGroup['LookupAndReference'].push(cFORMULATEXT); cFormulaFunctionGroup['LookupAndReference'].push(cFORMULATEXT);
cFormulaFunctionGroup['Information'] = cFormulaFunctionGroup['Information'] || []; cFormulaFunctionGroup['Information'] = cFormulaFunctionGroup['Information'] || [];
...@@ -365,18 +365,6 @@ ...@@ -365,18 +365,6 @@
cCOVARIANCE_S.prototype = Object.create(cBaseFunction.prototype); cCOVARIANCE_S.prototype = Object.create(cBaseFunction.prototype);
cCOVARIANCE_S.prototype.constructor = cCOVARIANCE_S; cCOVARIANCE_S.prototype.constructor = cCOVARIANCE_S;
/**
* @constructor
* @extends {AscCommonExcel.cBaseFunction}
*/
function cCSCH() {
cBaseFunction.call(this, "CSCH");
this.isXLFN = true;
}
cCSCH.prototype = Object.create(cBaseFunction.prototype);
cCSCH.prototype.constructor = cCSCH;
/** /**
* @constructor * @constructor
* @extends {AscCommonExcel.cBaseFunction} * @extends {AscCommonExcel.cBaseFunction}
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
cFormulaFunctionGroup['Mathematic'] = cFormulaFunctionGroup['Mathematic'] || []; cFormulaFunctionGroup['Mathematic'] = cFormulaFunctionGroup['Mathematic'] || [];
cFormulaFunctionGroup['Mathematic'].push(cABS, cACOS, cACOSH, cACOT, cACOTH, cARABIC, cASIN, cASINH, cATAN, cATAN2, cATANH, cCEILING, cFormulaFunctionGroup['Mathematic'].push(cABS, cACOS, cACOSH, cACOT, cACOTH, cARABIC, cASIN, cASINH, cATAN, cATAN2, cATANH, cCEILING,
cCOMBIN, cCOS, cCOSH, cCOT, cCOTH, cCSC, cDEGREES, cECMA_CEILING, cEVEN, cEXP, cFACT, cFACTDOUBLE, cFLOOR, cGCD, cINT, cCOMBIN, cCOS, cCOSH, cCOT, cCOTH, cCSC, cCSCH, cDEGREES, cECMA_CEILING, cEVEN, cEXP, cFACT, cFACTDOUBLE, cFLOOR, cGCD, cINT,
cISO_CEILING, cLCM, cLN, cLOG, cLOG10, cMDETERM, cMINVERSE, cMMULT, cMOD, cMROUND, cMULTINOMIAL, cODD, cPI, cISO_CEILING, cLCM, cLN, cLOG, cLOG10, cMDETERM, cMINVERSE, cMMULT, cMOD, cMROUND, cMULTINOMIAL, cODD, cPI,
cPOWER, cPRODUCT, cQUOTIENT, cRADIANS, cRAND, cRANDBETWEEN, cROMAN, cROUND, cROUNDDOWN, cROUNDUP, cSERIESSUM, cPOWER, cPRODUCT, cQUOTIENT, cRADIANS, cRAND, cRANDBETWEEN, cROMAN, cROUND, cROUNDDOWN, cROUNDUP, cSERIESSUM,
cSIGN, cSIN, cSINH, cSQRT, cSQRTPI, cSUBTOTAL, cSUM, cSUMIF, cSUMIFS, cSUMPRODUCT, cSUMSQ, cSUMX2MY2, cSUMX2PY2, cSIGN, cSIN, cSINH, cSQRT, cSQRTPI, cSUBTOTAL, cSUM, cSUMIF, cSUMIFS, cSUMPRODUCT, cSUMSQ, cSUMX2MY2, cSUMX2PY2,
...@@ -1065,6 +1065,61 @@ ...@@ -1065,6 +1065,61 @@
}; };
}; };
/**
* @constructor
* @extends {AscCommonExcel.cBaseFunction}
*/
function cCSCH() {
this.name = "CSCH";
this.value = null;
this.argumentsCurrent = 0;
}
cCSCH.prototype = Object.create(cBaseFunction.prototype);
cCSCH.prototype.constructor = cCSCH;
cCSCH.prototype.argumentsMin = 1;
cCSCH.prototype.argumentsMax = 1;
cCSCH.prototype.isXLFN = true;
cCSCH.prototype.numFormat = AscCommonExcel.cNumFormatNone;
cCSCH.prototype.Calculate = function (arg) {
var arg0 = arg[0];
//TODO в документации к COTH написано максимальное значение - Math.pow(2, 27), но MS EXCEL в данном случае не выдает ошибку
//проверку на максиимальное значение убрал
if (cElementType.cellsRange === arg0.type || cElementType.cellsRange3D === arg0.type) {
arg0 = arg0.cross(arguments[1]);
}
arg0 = arg0.tocNumber();
if (cElementType.error === arg0.type) {
return this.value = arg0;
} else if (cElementType.array === arg0.type) {
arg0.foreach(function (elem, r, c) {
if (cElementType.number === elem.type) {
if(0 === elem.getValue()){
this.array[r][c] = new cError(cErrorType.division_by_zero);
}else{
var a = 1 / Math.sinh(elem.getValue());
this.array[r][c] = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
}
} else {
this.array[r][c] = new cError(cErrorType.wrong_value_type);
}
});
return this.value = arg0;
} else {
if(0 === arg0.getValue()){
return this.value = new cError(cErrorType.division_by_zero);
}
var a = 1 / Math.sinh(arg0.getValue());
return this.value = isNaN(a) ? new cError(cErrorType.not_numeric) : new cNumber(a);
}
};
cCSCH.prototype.getInfo = function () {
return {
name: this.name, args: "( x )"
};
};
/** /**
* @constructor * @constructor
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment