예제 #1
0
        /// ///////////////////////////////////////////////////
        private string GetString(double?fValeur)
        {
            if (fValeur == null)
            {
                return("");
            }
            double fTmp = (double)fValeur;

            if (m_nArrondi >= 0)
            {
                fTmp = Sc2iMath.RoundUp(fTmp, m_nArrondi);
            }
            if (m_nArrondi > 0)
            {
                string strFormat = "0.0000000000000000000000000000000000".Substring(0, m_nNbDecimalesMini + 2);
                if (m_nArrondi > m_nNbDecimalesMini)
                {
                    strFormat += "#############################".Substring(0, m_nArrondi - m_nNbDecimalesMini);
                }
                return(fTmp.ToString(strFormat));
            }
            return(fTmp.ToString("0"));
        }
예제 #2
0
        /// //////////////////////////////////////////
        public override CResultAErreur MyEval(CContexteEvaluationExpression ctx, object[] valeursParametres)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                object val        = valeursParametres[0];
                int    nPrecision = (int)valeursParametres[1];
                if (val is int)
                {
                    result.Data = Sc2iMath.RoundUp((int)val, nPrecision);
                }
                else
                {
                    result.Data = Sc2iMath.RoundUp(Convert.ToDouble(val), nPrecision);
                }
            }
            catch
            {
                result.EmpileErreur(I.T("The paramters of the 'Round' function are incorrect|258"));
            }
            return(result);
        }
        //-------------------------------------------------------------------------------------------
        /// <summary>
        ///
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="valeursParametres"></param>
        /// <returns></returns>
        public override CResultAErreur MyEval(CContexteEvaluationExpression ctx, object[] valeursParametres)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                double fHeures  = Convert.ToDouble(valeursParametres[0]);
                bool   bNegatif = false;
                if (fHeures < 0)
                {
                    bNegatif = true;
                    fHeures  = Math.Abs(fHeures);
                }
                string strFormat    = valeursParametres[1].ToString();
                int    nNbDecimales = 999;
                if (valeursParametres.Length > 2 && valeursParametres[2] != null)
                {
                    nNbDecimales = Convert.ToInt32(valeursParametres[2]);
                }

                double fValYY = 0,
                       fValMM = 0,
                       fValdd = 0,
                       fValHH = 0,
                       fValmm = 0,
                       fValss = 0;

                if (strFormat.Contains("YY"))
                {
                    fValYY  = fHeures / (24 * 365.25);
                    fHeures = fHeures % (24 * 365.25);
                }
                if (strFormat.Contains("MM"))
                {
                    fValYY  = (int)fValYY;
                    fValMM  = fHeures / (24 * 30.4375);
                    fHeures = fHeures % (24 * 30.4375);
                }
                if (strFormat.Contains("dd"))
                {
                    fValMM  = (int)fValMM;
                    fValYY  = (int)fValYY;
                    fValdd  = fHeures / 24;
                    fHeures = fHeures % 24;
                }
                if (strFormat.Contains("HH"))
                {
                    fValdd  = (int)fValdd;
                    fValMM  = (int)fValMM;
                    fValYY  = (int)fValYY;
                    fValHH  = fHeures;
                    fHeures = (fHeures - (int)fHeures);
                }
                if (strFormat.Contains("mm"))
                {
                    fValHH  = (int)fValHH;
                    fValdd  = (int)fValdd;
                    fValMM  = (int)fValMM;
                    fValYY  = (int)fValYY;
                    fValmm  = fHeures * 60;
                    fHeures = (fValmm - (int)fValmm) / 60;
                }
                if (strFormat.Contains("ss"))
                {
                    fValmm = (int)fValmm;
                    fValHH = (int)fValHH;
                    fValdd = (int)fValdd;
                    fValMM = (int)fValMM;
                    fValYY = (int)fValYY;
                    fValss = (int)(fHeures * 3600);
                }

                // Arrondi au nompbre décimales demandées
                if (nNbDecimales != 999)
                {
                    fValYY = Sc2iMath.RoundUp(fValYY, nNbDecimales);
                    fValMM = Sc2iMath.RoundUp(fValMM, nNbDecimales);
                    fValdd = Sc2iMath.RoundUp(fValdd, nNbDecimales);
                    fValHH = Sc2iMath.RoundUp(fValHH, nNbDecimales);
                    fValmm = Sc2iMath.RoundUp(fValmm, nNbDecimales);
                    fValss = Sc2iMath.RoundUp(fValss, nNbDecimales);
                }

                if (fValss >= 60.0 && strFormat.Contains("mm"))
                {
                    fValmm += 1;
                    fValss -= 60;
                }
                if (fValmm >= 60.0 && strFormat.Contains("HH"))
                {
                    fValHH += 1;
                    fValmm -= 60.0;
                }
                if (fValHH >= 24.0 && strFormat.Contains("dd"))
                {
                    fValdd += 1;
                    fValHH -= 24;
                }
                if (fValdd >= 31.0 && strFormat.Contains("MM"))
                {
                    fValMM += 1;
                    fValdd -= 31;
                }
                if (fValMM >= 12.0 && strFormat.Contains("YY"))
                {
                    fValYY += 1;
                    fValMM -= 12;
                }

                // Remplace les caractères de formatage par leur valeur
                strFormat = strFormat.Replace("YY", fValYY.ToString());
                strFormat = strFormat.Replace("MM", fValMM.ToString());
                strFormat = strFormat.Replace("dd", fValdd.ToString());
                strFormat = strFormat.Replace("HH", fValHH.ToString());
                string strTemp = fValmm.ToString("0#");
                strFormat = strFormat.Replace("mm", strTemp);
                strTemp   = fValss.ToString("0#");
                strFormat = strFormat.Replace("ss", strTemp);
                if (bNegatif)
                {
                    strFormat = "-" + strFormat;
                }
                result.Data = strFormat;
            }
            catch
            {
                result.EmpileErreur(I.T("The parameters of the function 'HoursToString' are incorrect|303"));
            }
            return(result);
        }