public override long longValue()
{
if (System.Double.IsNaN(val)) return 0;
if (val == System.Double.PositiveInfinity) return System.Int64.MaxValue;
if (val == System.Double.NegativeInfinity) return System.Int64.MinValue;
return (long)val;
}