-5

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

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

我需要一个将其转换为米的函数。

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

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

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

比,valore * 1000我应该解决问题,但最后一种情况呢?结果必须是 64823,而不是 64823.3523

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

4

3 回答 3

5

在我看来,您应该将数据解析为 adouble或 a decimal,然后乘以 1000。理想情况下,除非您确实需要,否则不应转换回字符串表示形式。(您甚至可能想要一个明确地关于长度和单位的数据结构,以避免以后产生歧义。)

始终尝试尽早将数据转换为最自然的表示形式,然后尽可能长时间地坚持这种表示形式。

于 2012-10-03T09:32:59.150 回答
3

您的问题之一似乎是您有错误的数据,其中小数分隔符使用点或逗号表示。如果您无法从源头上解决该问题,您可以按照您已经在做的那样进行替换:

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

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

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

从公里到米只需乘以 på 1,000。似乎您想将米表示为整数,因此您需要对值进行四舍五入并将其转换:

var meters = (Int32) Math.Round(1000*kilometers, 0);
于 2012-10-03T10:00:23.220 回答
0

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

double rounded = Math.Round(valore);
double truncated = (int)valore;
于 2012-10-03T09:33:28.090 回答