国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C# 高精度加法 支持小數(待優化)

2019-11-17 02:32:23
字體:
來源:轉載
供稿:網友

C# 高精度加法 支持小數(待優化)

直接上代碼

實現思路:

1、首先小數點補 位,9223372036854775808.9+9223372036854775808.9223372036854775808 => 9223372036854775808.900000000000000000+9223372036854775808.9223372036854775808

2、然后開始按位進行計算,進位數放入jw,在下一位計算時加上

   public static char[] Sum(string a, string b)        {            return Sum(a.ToCharArray(), b.ToCharArray());        }        public static char[] Sum(char[] a, char[] b)        {            char[] c = a;//補位后的a            char[] d = b;//補位后的b            int alength = a.Count();//a長度            int blength = b.Count();//b長度            int adot = alength;//a小數點位置            int bdot = blength;//b小數點位置            #region 小數點補位            for (int i = 0; i < alength; i++)            {                if (a[i] == '.')                {                    adot = i;                    break;                }            }            for (int i = 0; i < blength; i++)            {                if (b[i] == '.')                {                    bdot = i;                    break;                }            }            if (adot != alength || bdot != blength)            {                if (adot == alength)                {                    c = new char[alength + 1 + blength - bdot - 1];                    for (int i = 0; i < c.Length; i++)                    {                        if (i < alength)                        {                            c[i] = a[i];                        }                        else if (i == alength)                        {                            c[i] = '.';                        }                        else                        {                            c[i] = '0';                        }                    }                }                else if (bdot == blength)                {                    d = new char[blength + 1 + alength - adot - 1];                    for (int i = 0; i < d.Length; i++)                    {                        if (i < blength)                        {                            d[i] = b[i];                        }                        else if (i == blength)                        {                            d[i] = '.';                        }                        else                        {                            d[i] = '0';                        }                    }                }                else                {                    if (alength - adot > blength - bdot)                    {                        d = new char[blength + ((alength - adot) - (blength - bdot))];                        for (int i = 0; i < d.Length; i++)                        {                            if (i < blength)                            {                                d[i] = b[i];                            }                            else                            {                                d[i] = '0';                            }                        }                    }                    else                    {                        c = new char[alength + ((blength - bdot) - (alength - adot))];                        for (int i = 0; i < c.Length; i++)                        {                            if (i < alength)                            {                                c[i] = a[i];                            }                            else                            {                                c[i] = '0';                            }                        }                    }                }            }            #endregion            List<char> item = new List<char>();            int cl = c.Length;            int dl = d.Length;            int r = 0;            int jw = 0;//進位            do            {                if (cl > 0 && dl > 0)                {                    if (c[cl - 1] == '.')                    {                        r = '.';                    }                    else                    {                        r = (int)c[cl - 1] + (int)d[dl - 1] - 96 + jw;                        jw = 0;                        if (r >= 10)                        {                            jw++;                            r = r - 10;                        }                    }                }                else if (cl <= 0 && dl > 0)                {                    r = d[dl - 1] - 48+jw;            jw = 0; if (r >= 10) { jw++; r = r - 10; }                }                else if (cl > 0 && dl <= 0)                {                    r = c[cl - 1] - 48+jw;            jw = 0; if (r >= 10) { jw++; r = r - 10; }                }                if (r == 46)                {                    item.Add(Convert.ToChar(r));                }                else                {                    item.Add(Convert.ToChar(r.ToString()));                }                cl--; dl--;            } while (cl > 0 || dl > 0);            if (jw == 1)            {                item.Add('1');            }            return item.ToArray();        }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天等县| 玛纳斯县| 荆门市| 依兰县| 扎赉特旗| 仪征市| 松滋市| 监利县| 土默特右旗| 弋阳县| 荥阳市| 遂平县| 津市市| 清水河县| 县级市| 安丘市| 贡觉县| 苏尼特左旗| 察哈| 蒙山县| 金乡县| 安康市| 兴宁市| 龙泉市| 博湖县| 东兰县| 苍溪县| 曲水县| 瓦房店市| 遂平县| 大化| 桦川县| 乌兰浩特市| 龙南县| 兴安县| 依兰县| 开江县| 舟曲县| 襄樊市| 江安县| 郸城县|