public static double?Get(object val, bool parse, string fmt)
        {
            if (val == null)
            {
                return(null);
            }
            try {
                TypeCode tc = val.GetTypeCode();
                switch (tc)
                {
                case TypeCode.Single: return(FloatToDouble(Convert.ToSingle(val)));

                case TypeCode.Double: return(Convert.ToDouble(val));

                case TypeCode.String:
                    if (!parse)
                    {
                        return(null);
                    }
                    double n;
                    if (!TryFromServer(Convert.ToString(val), fmt, out n, 0))
                    {
                        return(null);
                    }
                    return(n);

                default:
                    if (IsNumeric(tc))
                    {
                        return(Convert.ToDouble(val));
                    }
                    byte[] b  = val as byte[];
                    int    ix = 0;
                    if (b?.Length == sizeof(double))
                    {
                        return(IOEx.GetDouble(b, ref ix));
                    }
                    return(null);
                }
            } catch { return(null); }
        }