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); }
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)); }
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("オブジェクトは比較できません"); }
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); }
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); } }
private double ToDouble(object v) { return(NakoValueConveter.ToDouble(v)); }