如何创建一个C#控制台应用程序网格,将CSV条目按纬度和经度分组?

如何创建一个C#控制台应用程序网格,将CSV条目按纬度和经度分组?,c#,csv,mapping,console-application,C#,Csv,Mapping,Console Application,我正在编写一个C#console应用程序,它是一个与土地使用有关的大型项目的一部分。我的控制台应用程序需要使用每个条目的纬度和经度值对CSV文件中的条目进行分组。网格分组必须为.002度 我发现一些示例代码将执行类似的操作,但与所需的特定性不同: foreach (string[] row in reader) { lat = Decimal.Parse(row[latIndex]); lng = D

我正在编写一个C#console应用程序,它是一个与土地使用有关的大型项目的一部分。我的控制台应用程序需要使用每个条目的纬度和经度值对CSV文件中的条目进行分组。网格分组必须为.002度

我发现一些示例代码将执行类似的操作,但与所需的特定性不同:

                foreach (string[] row in reader) {
                lat = Decimal.Parse(row[latIndex]);
                lng = Decimal.Parse(row[lngIndex]);
                //TODO: do math to allow for percision of .002 rather than .001 like 
                I'm doing here
                gridID = (Math.Round(lat, 3) * 10000) + Math.Round(lng, 3);
                if (!grids.TryGetValue(gridID, out totals)) {
                    totals = new ALUGridTotals() {
                        lat = lat,
                        lng = lng
                    };

                    grids.Add(gridID, totals);
                }
本质上,我的问题是如何修改gridID语句中的数学方法以使用.002度的特殊性

多谢

也许是这样:

private static double WeirdRounding(double n)
{
    int temp = (int)(Math.Round(n, 3) * 1000);
    return temp % 2 == 0 ? (double)temp / 1000 : ((double)temp + 1) / 1000;
}
如果结果不“均匀”,我就把它收起来


编辑:替换为int,更正了愚蠢的打字错误。

可以使用int而不是double吗?