• C# 高精度减法 支持小数(待优化)


    是现实思路

    1,先小数点补位,8913758923475893274958738945793845-4893127498372459823745324532453245.284929384729837498237492 => 8913758923475893274958738945793845.000000000000000000000000-4893127498372459823745324532453245.284929384729837498237492.

    2,进行计算,最后补符号

            public static void BuweiF(ref string a, ref string b)
            {
                int al = a.Length;
                int bl = b.Length;
                string[] c = a.Split('.');
                string[] d = b.Split('.');
                int i = al - c[0].Length;
                int j = bl - d[0].Length;
                if (i != 0 && j != 0)
                {
                    if (i > j)
                    {
                        while (i != j)
                        {
                            b += "0";
                            j++;
                        }
                    }
                    else
                    {
                        while (i != j)
                        {
                            a += "0";
                            i++;
                        }
                    }
                }
                else if (i != 0 && j == 0)
                {
                    b += ".";
                    j++;
                    while (i != j)
                    {
                        b += "0";
                        j++;
                    }
                }
                else if (i == 0 && j != 0)
                {
                    a += ".";
                    i++;
                    while (i != j)
                    {
                        a += "0";
                        i++;
                    }
                }
                //Console.WriteLine(a);
               // Console.WriteLine(b);
            }
      public static char[] Diff(string a, string b)
            {
                BuweiF(ref a, ref b);
                List<char> item = new List<char>();
                int al = a.Length;
                int bl = b.Length;
                int r = 0;
                int jw = 0;//退位
                bool fushu = false;
                if (al > bl)
                {
                    do
                    {
                        if (al > 0 && bl > 0)
                        {
                            if (a[al - 1] == '.')
                            {
                                r = '.';
                            }
                            else
                            {
                                r = (int)a[al - 1] - (int)b[bl - 1] - jw;
                                jw = 0;
                                if (r < 0)
                                {
                                    r = 10 + r;
                                    jw++;
                                }
                            }
                        }
                        else if (al > 0 && bl <= 0)
                        {
                            r = a[al - 1] - 48 - jw;
                            jw = 0;
                            if (r < 0)
                            {
                                r = 10 + r;
                                jw++;
                            }
                        }
    
                        if (r == 46)
                        {
                            item.Add(Convert.ToChar(r));
                        }
                        else
                        {
                            item.Add(Convert.ToChar(r.ToString()));
                        }
                        al--; bl--;
                    } while (al > 0 || bl > 0);
                }
                else if (al < bl)
                {
                    fushu = true;
                    do
                    {
                        if (al > 0 && bl > 0)
                        {
                            if (b[bl - 1] == '.')
                            {
                                r = '.';
                            }
                            else
                            {
                                r = (int)b[bl - 1] - (int)a[al - 1] - jw;
                                jw = 0;
                                if (r < 0)
                                {
                                    r = 10 + r;
                                    jw++;
                                }
                            }
                        }
                        else if (bl > 0 && al <= 0)
                        {
                            r = b[bl - 1] - 48 - jw;
                            jw = 0;
                            if (r < 0)
                            {
                                r = 10 + r;
                                jw++;
                            }
                        }
    
                        if (r == 46)
                        {
                            item.Add(Convert.ToChar(r));
                        }
                        else
                        {
                            item.Add(Convert.ToChar(r.ToString()));
                        }
                        al--; bl--;
                    } while (al > 0 || bl > 0);
                }
                else
                {
                    if (a[0] > b[0])
                    {
                        do
                        {
                            if (al > 0 && bl > 0)
                            {
                                if (a[al - 1] == '.')
                                {
                                    r = '.';
                                }
                                else
                                {
                                    r = (int)a[al - 1] - (int)b[bl - 1] - jw;
                                    jw = 0;
                                    if (r < 0)
                                    {
                                        r = 10 + r;
                                        jw++;
                                    }
                                }
                            }
                            else if (al > 0 && bl <= 0)
                            {
                                r = a[al - 1] - 48 - jw;
                                jw = 0;
                                if (r < 0)
                                {
                                    r = 10 + r;
                                    jw++;
                                }
                            }
    
                            if (r == 46)
                            {
                                item.Add(Convert.ToChar(r));
                            }
                            else
                            {
                                item.Add(Convert.ToChar(r.ToString()));
                            }
                            al--; bl--;
                        } while (al > 0 || bl > 0);
                    }
                    else
                    {
                        fushu = true;
                        do
                        {
                            if (al > 0 && bl > 0)
                            {
                                if (b[bl - 1] == '.')
                                {
                                    r = '.';
                                }
                                else
                                {
                                    r = (int)b[bl - 1] - (int)a[al - 1] - jw;
                                    jw = 0;
                                    if (r < 0)
                                    {
                                        r = 10 + r;
                                        jw++;
                                    }
                                }
                            }
                            else if (bl > 0 && al <= 0)
                            {
                                r = b[bl - 1] - 48 - jw;
                                jw = 0;
                                if (r < 0)
                                {
                                    r = 10 + r;
                                    jw++;
                                }
                            }
    
                            if (r == 46)
                            {
                                item.Add(Convert.ToChar(r));
                            }
                            else
                            {
                                item.Add(Convert.ToChar(r.ToString()));
                            }
                            al--; bl--;
                        } while (al > 0 || bl > 0);
                    }
                }
                if (item[item.Count() - 1] == '0' && item[item.Count() - 2] != '.')
                {
                    item.RemoveAt(item.Count() - 1);
                }
                if (fushu)
                {
                    item.Add('-');
                }
                return item.ToArray();
    
            }
  • 相关阅读:
    Android 编程下的计时器
    Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
    Android 编程下的 TraceView 简介及其案例实战
    Android 编程下的日志工具类
    C#设计模式--装饰器模式
    C#设计模式--设配器模式
    C#设计模式--原型模式
    C#设计模式--建造者模式
    C#设计模式--单例模式
    C#设计模式--抽象工厂模式
  • 原文地址:https://www.cnblogs.com/DhyDream/p/4329316.html
Copyright © 2020-2023  润新知