如何将公里转换为米?

时间:2012-10-03 09:30:59

标签: c# .net math

我有一些定义“公里”的字符串,例如:

sValore = "64.8";
sValore = "64,8";
sValore = "64";
sValore = "64.82323523";

我需要一个将其转换为Meters的功能。

第一个问题是将其转换为“双倍”。我尝试过:

double valore = double.Parse(sValore.Replace(",", "."));

但实际上,first(64.8)的结果是,例如,648(必须是64.8)。

然后,做valore * 1000我应该解决问题,但最后一个案例呢?结果必须是64823,而不是64823.3523

那么,我该如何解决这些麻烦?

3 个答案:

答案 0 :(得分:4)

听起来我应该将数据解析为doubledecimal,然后再乘以1000.理想情况下,您应该转换回来除非你真的需要,否则为字符串表示。 (您甚至可能需要一个明确关于长度和单位的数据结构,以避免以后出现歧义。)

尽可能早地尝试将数据放入最自然的表示中,然后尽可能长时间地使用该表示。

答案 1 :(得分:3)

您的一个问题似乎是您的数据不正确,其中小数点分隔符使用点或逗号表示。如果你无法在源头解决这个问题,你可以像现在一样进行替换:

var sValore = "64.82323523";
var kilometers = Decimal.Parse(
  sValore.Replace(",", "."),
  CultureInfo.InvariantCulture
);

请注意,我将CultureInfo.InvariantCulture指定为IFormatProvider。这将确保将点用作小数分隔符。否则,如果当前区域性使用不同的小数分隔符,代码将中断。 (我认为这是你面临的问题 - “valore”是一个意大利语,文化使用逗号,而不是点。)

我还将值解析为Decimal,因为如果您不想执行大量计算,它通常是十进制数的更好类型。如果您愿意,可以使用Double代替。

从几公里到几公里只需要乘以1000。您似乎希望将米表示为整数,因此您需要对值进行舍入并将其转换为:

var meters = (Int32) Math.Round(1000*kilometers, 0);

答案 2 :(得分:0)

您可以使用Math.Round()方法将分数舍入到最接近的整数值,或者您只需将值转换为整数,从而简单地“删除”分数:

double rounded = Math.Round(valore);
double truncated = (int)valore;