C#将“ 4.1”和“ 4.10”解析为“ 4.1”。如何将数字解析为“ 4.10”?

时间:2018-08-24 22:51:23

标签: c# excel parsing

我正在用C#解析一个excel文件。我正在组织带有数字标识符的过程(例如4.14.24.3,...,4.104.11)。除以".10"结尾的任何数字被解析为".1"之外,其他所有方法均有效。我在.ToString()上执行的值是动态类型。

所以我什至没有把它作为string来使用。如何获得".10"作为.10(而不是.1)的身份?

3 个答案:

答案 0 :(得分:1)

通常,4.1 = 4.10,所以double.Parse()在这里不是您的朋友。

问题是您不是真正在解析数字,而是在解析层次结构,该层次结构在每个级别均使用点分数字。

因此,最好不要解析为double,而最好解析为整数数组。像这样:

Array.ConvertAll("4.10".Split('.'), n => int.Parse(n));

这将允许您处理层次结构中任意数量的“级别”,以及每个级别中任意数量的数字位。

例如,如果要将层次结构存储在将保留预期顺序的数据库列中,只需将数组作为 string 发出,用左零填充每个级别到数字您满意的数字位数。

如果只有两个级别,则可以将数字存储为decimal类型,但是仍然需要左键填充数字,即将4.1存储为4.001,将4.10存储为4.01等

答案 1 :(得分:0)

答案取决于您解析首字母string哪种类型

例如doublefloat

  double value = double.Parse("4.10", CultureInfo.InvariantCulture);

无法获得类似4.10d的信息,因为数学认为4.1 == 4.10 == 4.100 == ...;您所要做的就是在格式设置的帮助下将{em> double 表示为string

  // represent value (4.1) with 2 digits after the decimal point: 4.10
  Console.WriteLine(value.ToString("F2"));

对于decimal(具有缩放因子),因此您可以将410的缩放因子设为2410 / 10**2 == 4.10或{{1 }},缩放比例为411),您可以获得所需的值:为此您应添加41 / 10**1 == 4.1

0.00m

有关详细信息,请参见https://docs.microsoft.com/en-us/dotnet/api/system.decimal?redirectedfrom=MSDN&view=netframework-4.7.2

答案 2 :(得分:0)

这里的问题是,我敢打赌,您想a)照原样解析字符串,b)然后根据值排序,其中4.9在4.10之前,而4.11在此之前。如果将其解析为任何单个对象值,您将无法获得所需的结果。您需要将其放入字符串中,然后以某种方式进行转换。最简单的方法是拆分字符串,然后按第一个数字排序,然后按第二个数字排序。