是现实思路
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(); }