我编写了一个基于小数排序的代码。快速排序算法。 但我的问题是删除了一些小数的数字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;
}
}
答案 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)
您的计划中应该有两个部分:
在第一步中,请不要考虑删除数字0。
在第二步中,请使用.toString()
here格式化数字。