Beispiel #1
0
        static public object DoubleStrToNum(string str, int baseMark)
        {
            object value = null;

            try
            {
                switch (baseMark)
                {
                case 10:
                {
                    value = Double.Parse(str, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign | NumberStyles.AllowLeadingWhite);
                    break;
                }

                case 16:
                {
                    string tmpStr = "";

                    Int64 tmp = (Int64)CommonTool.StrToNum(TypeCode.Int64, str, 16);
                    if ((tmp & (Int64)(((Int64)1) << 63)) != 0)
                    {
                        tmpStr = Convert.ToString(tmp, 2);
                    }
                    else
                    {
                        tmp    = tmp | (Int64)(((Int64)1) << 63);
                        tmpStr = Convert.ToString(tmp, 2);
                        tmpStr = '0' + tmpStr.Substring(1);
                    }
                    tmpStr = tmpStr + new string('0', 64 - tmpStr.Length);

                    string str1 = tmpStr.Substring(0, 1);
                    string str2 = tmpStr.Substring(1, 16);
                    string str3 = tmpStr.Substring(17);

                    UInt16 num1 = (UInt16)CommonTool.StrToNum(TypeCode.UInt16, str2, 2);
                    int    num2 = Convert.ToInt32(num1);

                    if (num2 > (32767 + 23))
                    {
                        return(Double.MaxValue);
                    }
                    else if (num1 < 32767)
                    {
                        double dtmp = 0;
                        for (int i = 0; i < str3.Length; i++)
                        {
                            if (str3[i] == '1')
                            {
                                dtmp += (double)1 / (double)(Math.Pow(2, (i + 1)));
                            }
                        }
                        double result = dtmp;
                        if (str1 == "1")
                        {
                            return(0 - result);
                        }
                        else
                        {
                            return(result);
                        }
                    }
                    else
                    {
                        string stra1 = str3.Substring(0, num1 - 32767);
                        string stra2 = str3.Substring(num1 - 32767);
                        object left  = CommonTool.StrToNum(TypeCode.UInt64, stra1, 2);
                        double dtmp  = 0;
                        for (int i = 0; i < stra2.Length; i++)
                        {
                            if (stra2[i] == '1')
                            {
                                dtmp += (double)1 / (double)(Math.Pow(2, (i + 1)));
                            }
                        }
                        double result = Convert.ToDouble(left) + dtmp;
                        if (str1 == "1")
                        {
                            return(0 - result);
                        }
                        else
                        {
                            return(result);
                        }
                    }
                }
                }
            }
            catch (System.Exception)
            {
                value = null;
            }
            return(value);
        }
Beispiel #2
0
        static public string DoubleNumToStr(double value, string baseMark, bool ifAlignment)
        {
            switch (baseMark)
            {
            case "D":
            {
                return(value.ToString());
            }

            case "X":
            {
                double tmp = 0;
                if (value < 0)
                {
                    tmp = 0 - value;
                }
                else
                {
                    tmp = value;
                }
                string   tmpStr = tmp.ToString();
                string[] str    = tmpStr.Split(new char[1] {
                        '.'
                    }, StringSplitOptions.RemoveEmptyEntries);
                Int64  tmpint  = (Int64)CommonTool.StrToNum(TypeCode.Int64, str[0], 10);
                string leftStr = Convert.ToString(tmpint, 2);

                string rightStr = "";
                if (str.Length > 1)
                {
                    double orginal   = Convert.ToDouble(tmp);
                    double intPart   = Convert.ToDouble(tmpint);
                    double floatPart = orginal - intPart;
                    while (true)
                    {
                        if (leftStr.Length + rightStr.Length >= 47)
                        {
                            break;
                        }
                        floatPart = floatPart * 2;
                        if (floatPart > (double)1)
                        {
                            floatPart = floatPart - (double)1;
                            rightStr += "1";
                        }
                        else
                        {
                            rightStr += "0";
                        }
                    }
                }

                string middle = "";
                if (leftStr == "0")
                {
                    leftStr = "";
                    middle += "0111111111111111";
                }
                else
                {
                    middle = Convert.ToString(leftStr.Length + 32767, 2);
                    middle = middle + new string('0', 16 - middle.Length);
                }
                string headerStr = (value > (double)0) ? "0" : "1";
                string tmpStrNew = leftStr + rightStr;
                if (tmpStrNew.Length < 47)
                {
                    tmpStrNew = tmpStrNew + new string('0', 47 - tmpStrNew.Length);
                }
                string result    = headerStr + middle + tmpStrNew;
                Int64  resultInt = Convert.ToInt64(result, 2);
                result = CommonTool.NumToStr(TypeCode.Int64, resultInt, "X", true);
                return(result);
            }
            }
            return("0000000000000000");
        }
Beispiel #3
0
        static public object FloatStrToNum(string str, int baseMark)
        {
            object value = null;

            try
            {
                switch (baseMark)
                {
                case 10:
                {
                    value = Single.Parse(str, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign | NumberStyles.AllowLeadingWhite);
                    break;
                }

                case 16:
                {
                    string tmpStr = "";

                    Int32 tmp = (Int32)CommonTool.StrToNum(TypeCode.Int32, str, 16);
                    if ((tmp & (1 << 31)) != 0)
                    {
                        tmpStr = Convert.ToString(tmp, 2);
                    }
                    else
                    {
                        tmp    = tmp | (1 << 31);
                        tmpStr = Convert.ToString(tmp, 2);
                        tmpStr = '0' + tmpStr.Substring(1);
                    }
                    tmpStr = tmpStr + new string('0', 32 - tmpStr.Length);

                    string str1 = tmpStr.Substring(0, 1);
                    string str2 = tmpStr.Substring(1, 8);
                    string str3 = tmpStr.Substring(9);

                    byte num1 = (byte)CommonTool.StrToNum(TypeCode.Byte, str2, 2);
                    int  num2 = Convert.ToInt32(num1);

                    if (num2 > (127 + 23))
                    {
                        return(float.MaxValue);
                    }
                    else if (num1 < 127)
                    {
                        double dtmp = 0;
                        for (int i = 0; i < str3.Length; i++)
                        {
                            if (str3[i] == '1')
                            {
                                dtmp += (double)1 / (double)(Math.Pow(2, (i + 1)));
                            }
                        }
                        float result = Convert.ToSingle(dtmp);
                        if (str1 == "1")
                        {
                            return(0 - result);
                        }
                        else
                        {
                            return(result);
                        }
                    }
                    else
                    {
                        string stra1 = str3.Substring(0, num1 - 127);
                        string stra2 = str3.Substring(num1 - 127);
                        object left  = CommonTool.StrToNum(TypeCode.UInt32, stra1, 2);
                        double dtmp  = 0;
                        for (int i = 0; i < stra2.Length; i++)
                        {
                            if (stra2[i] == '1')
                            {
                                dtmp += (double)1 / (double)(Math.Pow(2, (i + 1)));
                            }
                        }
                        float result = Convert.ToSingle(left) + Convert.ToSingle(dtmp);
                        if (str1 == "1")
                        {
                            return(0 - result);
                        }
                        else
                        {
                            return(result);
                        }
                    }
                }
                }
            }
            catch (System.Exception)
            {
                value = null;
            }
            return(value);
        }