如何在保持小数位的同时存储经度和纬度?

时间:2014-09-04 14:37:20

标签: c# asp.net double decimal

我正在努力保持用户输入的尾随零的负荷。

我正在使用ASP.NET MVC。用户进入网页并输入一个数字,如下所示:

53.6436717这是经度协调。在上面提到的例子中,这不是问题,因为所有数字都被保留了。

但53.6436717000与53.6436717000000000不同。

我的问题是如何保留用户输入的确切值?我不想修剪零,我不想添加更多的零,我只需要保持数字保持不变。必须有一个明显的方法吗?

5 个答案:

答案 0 :(得分:1)

我会引起争议,并建议您使用小数实际上很好。

虽然您是正确的,坐标值53.6436717000与53.6436717000000000不同,但指示了相同的位置。这些坐标的精确度有什么不同。

我的建议是将这些存储在十进制中,并带一个整数,表示该坐标准确的DP数。

使用this question的答案来计算小数位数

decimal longitude = 0;
decimal latitude = 0;
var precision = BitConverter.GetBytes(decimal.GetBits(argument)[3])[2];

使用此信息,您可以将这些值恢复为字符串,在地图上显示,向地图添加不确定区域,无论您想要什么!

答案 1 :(得分:0)

我建议将这些数字存储为decimal类型,因为它们比双打或浮点数更为谨慎。

在实际显示值时,您应该遇到问题,并且正在显示尾随零,而不是将尾随零作为数字的一部分是问题。

如果这是正确的,请使用ToString(string format)方法http://msdn.microsoft.com/en-us/library/fzeeb5cd(v=vs.110).aspx

示例:

double d = 99.3100000;
string s = d.ToString("0.###");
Console.WriteLine(s);

将显示为99.31。 “0”表示数字,“#”表示数字(如果存在)。

答案 2 :(得分:0)

只需将输入保存为字符串即可。仅当/需要计算时才转换为小数,此时尾随零是无关紧要的。

答案 3 :(得分:0)

我会改变你用来保持数字到小数的类型,它应该保持为零。

decimal x = 53.6436717000M;

Console.WriteLine(x);

结果:

53.6436717000

如果由于某种原因你无法做到这一点,我假设这些坐标总是与您的应用程序具有相同的小数位数?如果是这样的话,你可以在需要显示数字的时候将零点添加到数字的末尾,如下所示:

double x = 53.6436717000;

Console.WriteLine(x); // 53.6436717 (missing zeroes)

string y = x.ToString().Split('.').Last();

while(y.Length < 10) // where 10 is the number of decimal places
{
    y+="0";
}

Console.WriteLine(x.ToString().Split('.').First() + "." + y); // 53.6436717000 (with zeroes)

答案 4 :(得分:-1)

你遇到的问题是因为计算机将1.25和1.250000存储为完全相同的数字模式(因为数学上它们毕竟是相同的数字)。当您显示数字时,C#默认决定显示多少小数位,但如果您使用了任何数字类型,它将不再知道用户输入的小数位数。而不是迈克尔的建议,我会存储数字和小数位数。这样你仍然可以对数字进行算术运算,你可以直接在输出格式语句中使用小数位数。我也可能把它作为一种新的数字类型包装起来。