我从数据阅读器读取数据并希望为此添加一些值。它给我错误
输入字符串的格式不正确
这是我的代码
int OldAmount = 0;
while (dr.Read())
{
OldAmount = dr.GetInt32(0);
}
string CurrentAmount = (Convert.ToInt32(amnt) + Convert.ToInt32(OldAmount)).ToString();
其中amnt
为string
且值23000
。
有什么不对吗?
答案 0 :(得分:0)
Convert.ToInt
取决于您的计算机CurrentCulture
。
如果您的小数点分隔符.
可以获得该异常。
您可以Int.Parse使用字符串格式规范,例如Int32.Parse("23000.00", NumberStyles.AllowDecimalPoint);
。
但您确定int
不是decimal
吗?
答案 1 :(得分:0)
您正在转换为int,而您有小数。
将convert.ToInt32(amnt)
更改为convert.ToDecimal(amnt)
答案 2 :(得分:0)
OldAmount
已经是一个整数,你不需要再次转换它。尝试:
string CurrentAmount = (int.Parse("23000.00", NumberStyles.AllowDecimalPoint) + OldAmount).ToString();
或者只是使用小数。
答案 3 :(得分:0)
Convert.ToInt32
method使用您当前的文化设置。
您的CurrentCulture
的NumberDecimalSeparator
property看起来不是.
或/并且由于Convert.ToInt32
默认使用NumberStyles.Integer
,您需要NumberStyles.AllowDecimalPoint
还要指出小数点分隔符。
您可以使用Int32.Parse(String, NumberStyles, IFormatProvider)
overload代替提供;
int amnt = Int32.Parse("23000.00",
NumberStyles.Integer | NumberStyles.AllowDecimalPoint,
CultureInfo.InvariantCulture); //23000
然后你就可以使用这个值了;
string CurrentAmount = (amnt + OldAmount).ToString();
顺便说一下,由于您的字符串没有任何尾随或前导空格或前导符号,因此在您的情况下使用NumberStyles.Integer
是不必要的。你可以做;
int amnt = Int32.Parse("23000.00",
NumberStyles.AllowDecimalPoint,
CultureInfo.InvariantCulture); //23000