我已经写了一段代码,我将两位小数分成如下。当代码中z的值类似于2.33时,它工作正常,但当代码中的z值为2.0时,在此行中“long secondValue = Convert.ToInt64(values [1]);”它正在崩溃,因为“索引超出了数组的范围”
result_lstCatalogcount.CountofItems = Convert.ToInt32(item1.itemcount);
double x = Convert.ToDouble(item1.itemcount);
double y = qs.Ipp;
double z = x / y;
int a = Convert.ToInt32(z);
//double value = 2635.215;
var values = z.ToString(CultureInfo.InvariantCulture).Split('.');
int firstValue = Convert.ToInt32(values[0]);
long secondValue = Convert.ToInt64(values[1]);
if(secondValue > 1)
{
result_lstCatalogcount.Pagination = firstValue + 1;
}
else
{
result_lstCatalogcount.Pagination = firstValue;
}
答案 0 :(得分:3)
2.0的ToString
只是“2”,没有句号,所以当你分裂时,你得到一个只有一个项目在索引0的数组。你可以检查数组的大小来处理这个。 / p>
int firstValue = values.Length > 1 ? Convert.ToInt64(values[1]) : 0;
答案 1 :(得分:1)
您尝试将values[1]
解析为long
而未实际检查索引1中是否存在值。如果该数字为integer
,则为2
。例如,values[0]
我希望包含2
,value[1]
可能不存在。
在尝试将索引转换为不可为空的对象之前,您需要检查索引是否确实存在。
你可以用简单的东西来做到这一点
double secondValue = 0;
if (values.Length > 1)
{
secondValue = Convert.ToInt64(values[1]);
}
或者那种效果。