zoukankan      html  css  js  c++  java
  • 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();
    
            }
  • 相关阅读:
    Qt Release 构建时强制包含调试信息
    Spring Kafka(二)操作Topic以及Kafka Tool 2的使用
    PostgreSQL全文检索简介
    qcow2虚拟磁盘映像转化为vmdk
    Nodejs-JWT token认证:为什么要使用token、token组成(头部、载荷、签名)、jwt使用过程以及token对比session的好处(单点登录、减轻服务器压力、存储信息等)
    [Kotlin] Multi ways to write constuctor in Kotlin
    [CSS] Use CSS Transforms to Create Configurable 3D Cuboids
    [CSS] Use CSS Variables Almost like Boolean Values with Calc (maintainable css)
    [Kotlin] Typecheck with 'is' keyword, 'as' keyword for assert type
    [Kotlin] When to add () and when not to
  • 原文地址:https://www.cnblogs.com/DhyDream/p/4329316.html
Copyright © 2011-2022 走看看