我正在努力保持用户输入的尾随零的负荷。
我正在使用ASP.NET MVC。用户进入网页并输入一个数字,如下所示:
53.6436717这是经度协调。在上面提到的例子中,这不是问题,因为所有数字都被保留了。
但53.6436717000与53.6436717000000000不同。
我的问题是如何保留用户输入的确切值?我不想修剪零,我不想添加更多的零,我只需要保持数字保持不变。必须有一个明显的方法吗?
答案 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#默认决定显示多少小数位,但如果您使用了任何数字类型,它将不再知道用户输入的小数位数。而不是迈克尔的建议,我会存储数字和小数位数。这样你仍然可以对数字进行算术运算,你可以直接在输出格式语句中使用小数位数。我也可能把它作为一种新的数字类型包装起来。