我正在用C#解析一个excel文件。我正在组织带有数字标识符的过程(例如4.1
,4.2
,4.3
,...,4.10
,4.11
)。除以".10"
结尾的任何数字被解析为".1"
之外,其他所有方法均有效。我在.ToString()
上执行的值是动态类型。
所以我什至没有把它作为string
来使用。如何获得".10"
作为.10
(而不是.1
)的身份?
答案 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
的哪种类型。
例如double
或float
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
的缩放因子设为2
:410 / 10**2 == 4.10
或{{1 }},缩放比例为41
:1
),您可以获得所需的值:为此您应添加41 / 10**1 == 4.1
:
0.00m
答案 2 :(得分:0)
这里的问题是,我敢打赌,您想a)照原样解析字符串,b)然后根据值排序,其中4.9在4.10之前,而4.11在此之前。如果将其解析为任何单个对象值,您将无法获得所需的结果。您需要将其放入字符串中,然后以某种方式进行转换。最简单的方法是拆分字符串,然后按第一个数字排序,然后按第二个数字排序。