难以删除十进制数中的零值?

时间:2013-12-24 09:47:52

标签: c# sorting decimal

我编写了一个基于小数排序的代码。快速排序算法。 但我的问题是删除了一些小数的数字0。例如723.1000变为723.1数字对我很重要,因为我希望显示并存储为

现在,如何在不删除十进制数字的零的情况下执行此操作

我们可能会在数组中看到这些数字

不会删除零。

10.20 ==> 10.2

50.60000 ==> 50.6

145698.154780 ===> 145698.15478

很多零都没有修复

这是我的问题。

internal class Sorter
{
    public string[] QuickSort(string[] array, int low, int high)
    {
        if (low < high)
        {
            int p = Partition(array, low, high);
            QuickSort(array, low, p - 1);
            QuickSort(array, p + 1, high);
        }

        return array;
    }

    private static int Partition(string[] array, int low, int high)
    {
        int left = low + 1, right = high;
        string temp;
        double pivot = double.Parse(array[low]);
        int piv;

        while (left <= right)
        {
            while (left <= right && Convert.ToDouble(array[left]) <= pivot)


                left++;

            while (left <= right && Convert.ToDouble(array[right]) >= pivot)


                right--;

            if (left < right)
            {
                temp = array[left];
                array[left] = array[right];
                array[right] = temp;
            }
        }
        if (right == high)
            piv = high;
        else if (right == low)
            piv = low;
        else
            piv = left - 1;
        array[low] = array[piv];
        array[piv] = pivot.ToString();
        return piv;
    }
}

4 个答案:

答案 0 :(得分:3)

您可以尝试使用Double.ToString()

   double d=723.1000;
   string s = d.ToString("0.0");

检查here以获取更多格式选项。

<强>更新 你可以试试这个:

string s = d.ToString().TrimEnd('0');

更新2 : 正如here所述:

  

double不会保持无关紧要的数字 - 就双倍而言,1.5和1.50000之间没有区别。

     

如果要保留无效数字,请改用小数。它   不管怎样,根据你的具体情况,你可能更适合你   上下文。 (我们在这里只有很少的背景......)

因此,您可以使用此decimal代替double

decimal d = 723.1000M;
string s = d.ToString();

答案 1 :(得分:1)

尝试这样Custom Numeric Format Strings

decimal d = 0.00000000000010000000000m;
string custom = d.ToString("0.#########################");
// gives: 0,0000000000001
string general = d.ToString("G29");
// gives: 1E-13

答案 2 :(得分:0)

您可以尝试使用某些linq来排序类似

的内容
double[] myDubleNumber = { 15.00003,  1758.4856, 20.123, 1478.0214,120.0223 };

            var result = myDubleNumber.OrderBy(x => x).Select(x => Math.Round(x, 2));

            foreach (var d in result)
            {
                Console.WriteLine(d);
            }
            Console.ReadLine();

答案 3 :(得分:0)

最好是public double[] QuickSort(double[] array, int low, int high)

您的计划中应该有两个部分:

  1. 输入数字数组并输出已排序的数组;
  2. 格式化并显示结果。
  3. 在第一步中,请不要考虑删除数字0。

    在第二步中,请使用.toString() here格式化数字。