将数字转换为数字数据类型时出现算术溢出错误。对于小数小于 100.00 到 NUMERIC(18,2)
Arithmetic overflow error converting numeric to data type numeric. For decimal less than 100.00 to NUMERIC(18,2)
我有一个存储过程给我一个错误
Arithmetic overflow error converting numeric to data type numeric.
当我尝试运行时。我已经将其追溯到导致此问题的 3 个参数。所有 3 个值都是小于 100 的十进制值(例如 36.2 或 11.92),它们的数据类型为十进制。 SQL 中的数据类型是 NUMERIC(18, 2)
。它们是从电子表格中获取的百分比值。他们都是运行通过这个方法:
//Parses Percentages or returns zero if parse fails.
public static decimal PctParseOrZero(string val)
{
decimal newVal;
if (val.EndsWith("%"))
{
if (decimal.TryParse(val.Substring(0, val.Length - 1), out newVal))
{
return newVal;
}
else
{
return 0;
}
}
else
{
decimal.TryParse(val, out newVal);
return newVal;
}
}
当我尝试 运行 我的存储过程时,出现上述错误。为什么我会得到一个明显适合 NUMERIC(18, 2)
的值的算术溢出?
由于您没有向我们展示您的存储过程,我无法确定您尝试使用十进制值做什么。
但是,请注意,当您从 excel 中检索百分比值时,例如:36.9%,它实际上是 return 0.369.
这样,在您的示例中,即使 excel 显示值 36.2%,但它实际上传递了 0.392您的存储过程违反了 NUMERIC(18, 2)
您可以尝试修改您的代码:
if (decimal.TryParse(val.Substring(0, val.Length - 1), out newVal))
{
return newVal;
}
至:
if (decimal.TryParse(val.Substring(0, val.Length - 1), out newVal))
{
return newVal * 100;
}
否则,您可能需要修改存储过程以适应此
我有一个存储过程给我一个错误
Arithmetic overflow error converting numeric to data type numeric.
当我尝试运行时。我已经将其追溯到导致此问题的 3 个参数。所有 3 个值都是小于 100 的十进制值(例如 36.2 或 11.92),它们的数据类型为十进制。 SQL 中的数据类型是 NUMERIC(18, 2)
。它们是从电子表格中获取的百分比值。他们都是运行通过这个方法:
//Parses Percentages or returns zero if parse fails.
public static decimal PctParseOrZero(string val)
{
decimal newVal;
if (val.EndsWith("%"))
{
if (decimal.TryParse(val.Substring(0, val.Length - 1), out newVal))
{
return newVal;
}
else
{
return 0;
}
}
else
{
decimal.TryParse(val, out newVal);
return newVal;
}
}
当我尝试 运行 我的存储过程时,出现上述错误。为什么我会得到一个明显适合 NUMERIC(18, 2)
的值的算术溢出?
由于您没有向我们展示您的存储过程,我无法确定您尝试使用十进制值做什么。
但是,请注意,当您从 excel 中检索百分比值时,例如:36.9%,它实际上是 return 0.369.
这样,在您的示例中,即使 excel 显示值 36.2%,但它实际上传递了 0.392您的存储过程违反了 NUMERIC(18, 2)
您可以尝试修改您的代码:
if (decimal.TryParse(val.Substring(0, val.Length - 1), out newVal))
{
return newVal;
}
至:
if (decimal.TryParse(val.Substring(0, val.Length - 1), out newVal))
{
return newVal * 100;
}
否则,您可能需要修改存储过程以适应此