public override object Call(IObj that, object[] args) { if (that.Class != ObjClass.Number || !that.HasValue()) throw new ShouldThrowTypeError(); return (that as ValueObj).Value; }
public override object Call(IObj that, object[] args) { if (that.Class != ObjClass.Boolean || !that.HasValue()) throw new ShouldThrowTypeError(); return JsTypeConverter.ToBoolean((that as ValueObj).Value) ? "true" : "false"; }
public override object Call(IObj that, object[] args) { if (that.Class != ObjClass.Number || !that.HasValue()) throw new ShouldThrowTypeError(); //TODO: this should handle args[0] (radix) correctly. return JsTypeConverter.ToString((that as ValueObj).Value); }
public override object Call(IObj that, object[] args) { if (that.Class != ObjClass.Number || !that.HasValue()) throw new ShouldThrowTypeError(); var fractions = HasArgs(args) ? JsTypeConverter.ToInt32(args[0]) : 0; var dbl = JsTypeConverter.ToNumber((that as ValueObj).Value); return dbl.ToString("f" + fractions, CultureInfo.InvariantCulture); }
public override object Call(IObj that, object[] args) { if (that.Class != ObjClass.Number || !that.HasValue()) throw new ShouldThrowTypeError(); var dbl = JsTypeConverter.ToNumber((that as ValueObj).Value); if (double.IsNaN(dbl) || double.IsInfinity(dbl) || !HasArgs(args) || args[0] is Undefined) return JsTypeConverter.ToString(dbl); var precision = HasArgs(args) ? JsTypeConverter.ToInt32(args[0]) : 1; var asString = dbl.ToString("e23", CultureInfo.InvariantCulture); var numDecimals = asString.IndexOfAny(new char[] { '.', 'e' }); precision -= (numDecimals == -1 ? asString.Length : numDecimals); return dbl.ToString("f" + (precision < 1 ? 1 : precision), CultureInfo.InvariantCulture); }