コード例 #1
0
ファイル: NakoBaseSystem.cs プロジェクト: weyk/nadesiko2
        private object _divEx(INakoFuncCallInfo info)
        {
            object ar = info.StackPop();
            object b  = info.StackPop();

            if (!(ar is NakoVariable))
            {
                throw new ApplicationException("『掛ける!』の引数が変数ではありません");
            }
            object a = ((NakoVariable)ar).Body;
            object c;

            if (a is long && b is long)
            {
                c = (long)a / (long)b;
            }
            else
            {
                double da = NakoValueConveter.ToDouble(a);
                double db = NakoValueConveter.ToDouble(b);
                c = da / db;
            }
            // 結果をセット
            ((NakoVariable)ar).SetBodyAutoType(c);
            return(c);
        }
コード例 #2
0
ファイル: NakoBaseSystem.cs プロジェクト: weyk/nadesiko2
        private object _ceil(INakoFuncCallInfo info)
        {
            object a  = info.StackPop();
            object b  = info.StackPop();
            int    ib = 0;

            if (b is string)
            {
                string sb = (string)b;
                if (sb.Contains("."))
                {
                    ib = GetDigitOfDecimal(sb);
                }
                else
                {
                    ib = int.Parse(sb);
                }
            }
            else
            {
                ib = NakoValueConveter.ToInt(b);
            }
            double da = NakoValueConveter.ToDouble(a);

            return(__ceil(da, ib));
        }
コード例 #3
0
 private object calc_method_gteq(object a, object b)
 {
     if (a is long && b is long)
     {
         return((long)a >= (long)b);
     }
     if (a is string || b is string)
     {
         return(string.Compare(NakoValueConveter.ToString(a), NakoValueConveter.ToString(b)) >= 0);
     }
     if (a is double || b is double)
     {
         return(NakoValueConveter.ToDouble(a) >= NakoValueConveter.ToDouble(b));
     }
     throw new NakoInterpreterException("オブジェクトは比較できません");
 }
コード例 #4
0
 private object calc_method_not_eq(object a, object b)
 {
     if (a is long && b is long)
     {
         return((long)a != (long)b);
     }
     if (a is string || b is string)
     {
         return(NakoValueConveter.ToString(a) != NakoValueConveter.ToString(b));
     }
     if (a is double || b is double)
     {
         return(NakoValueConveter.ToDouble(a) != NakoValueConveter.ToDouble(b));
     }
     return(a != b);
 }
コード例 #5
0
ファイル: NakoBaseSystem.cs プロジェクト: weyk/nadesiko2
        private object _mod(INakoFuncCallInfo info)
        {
            object a = info.StackPop();
            object b = info.StackPop();

            if (a is long && b is long)
            {
                return((long)a % (long)b);
            }
            else
            {
                double da = NakoValueConveter.ToDouble(a);
                double db = NakoValueConveter.ToDouble(b);
                return(da % db);
            }
        }
コード例 #6
0
 private double ToDouble(object v)
 {
     return(NakoValueConveter.ToDouble(v));
 }