我导入了一个excel文件,我想将这些值添加到数据库中。在数据库中有一个十进制类型(18,5),我想将我的值0.00204添加到数据库中的该列。我的模型类中的变量是十进制类型,我尝试使用此代码:
Convert.ToDecimal(items[7]);
然后我得到输入错误,如果格式不正确。 items的类型为object []。如何将值解析为小数?
所有其他工作都很好:
product.packSize = Convert.ToInt32(items[3]);
product.leadTime = Convert.ToString(items[4]);
product.generalAccessoryCategoryId = Convert.ToInt32(items[5]);
product.Company = Convert.ToString(items[6]);
product.Weight = Convert.ToDecimal(items[7]);
答案 0 :(得分:3)
检查可能存在的任何阶段的可能错误情况,然后一旦安全,提取字符串:
decimal result;
if ((items!= null) &&
(items.Any()) &&
(items[7] != null) &&
(Decimal.TryParse(items[7].ToString(), out result))
product.Weight = result;
经过几次评论和一些调查后,我认为项目[7]具有转换不期望的字符。我已经更新了上面的答案。
decimal result;
Decimal.TryParse("0a00204", out result); // Returns false
答案 1 :(得分:2)
如果您正在处理文化问题,可以使用此TryParse(Object, NumberStyles, IFormatProvider, out decimal)
并包含您的文化(使用en-GB
作为示例):
decimal.TryParse(items[7], NumberStyles.Any, CultureInfo.GetCultureInfo("en-GB"), out product.Weight);
如果项变量具有默认值,则可以使用TryParse
,如果可以解析该值,则将替换该值,或将其保留为默认值。否则,您可以使用TryParse
的结果(如果成功则为true,如果失败则为false)以确定是否需要设置该值。例如:
decimal.TryParse(items[7], out product.Weight)
OR
if(!decimal.TryParse(items[7], out product.Weight))
{
product.Weight = (decimal)0;
}
在数组中的对象上调用ToString()
方法也可能会有所帮助,因为有时解析对象的解析函数会比它们的String表示更麻烦。
答案 2 :(得分:1)
if(items != null && items[7] != null){
product.Weight = decimal.Parse(items[7].ToString());
}