在C#中将包含句点(.)的字符串转换为Int32时的问题
本文关键字:转换 字符串 Int32 问题 包含 句点 | 更新日期: 2023-09-27 18:02:41
我正在创建一个POS(销售点(,在尝试将价格"0.60
"转换为整数时遇到了一个问题。
数据背景:数据源的所有数据都来自MySQL数据库,我已经安装并连接了该数据库,没有任何问题。
价格存储在一个文本框中,格式为"0.60
",我相信这就是它没有被转换的原因。我一直收到下面的消息。
附加信息:输入字符串的格式不正确。
//Puts the Price Into a String.
string NewPrice = txtPrice.Text;
//Converts The Quantity In the TextBox field to a numbers.
Quantity = Convert.ToInt32(txtQuant.Text);
//Incorrect Format & Attempt One.
//Price = Convert.ToInt32(NewPrice); <--- Problem.
//Price = int.Parse(NewPrice);
// I've also tried this method below with two '0' inside the { } brackets.
// But Still No Luck.
Price = Convert.ToInt32(string.Format("{0.00}",txtPrice.Text)); // <--- Problem.
// Times Price & Quantity to get Total Price (0.60 * 2 = 1.20)
TotalSingleItemPrice = Price * Quantity;
// The Single Item Price is added into the overall total.
TotalPrice += TotalSingleItemPrice;
// Converts Total Item Price to String from Int.
string TotalPriceStr = Convert.ToString(TotalSingleItemPrice);
// Puts TextBoxes / Strings Into One String array (I think).
string[] InizialItemList = new string[] { cmboInitItem.Text, Convert.ToString(Price), Convert.ToString(Quantity), TotalPriceStr};
// Adds The String Array Into the Data Grid View.
DGVIIL.Rows.Add(InizialItemList);
我试着使用string.Format("{0.00}",txtPrice.Text)
设置来解决这个问题,但我看不出我仔细看了什么。如果可能的话,我希望价格显示在我的DataGridView-DGVIIL中,作为0.60
。
0.60
不是整数,上的错误正确
备选方案:
Decimal d = Decimal.Parse(txtPrice.Text);
甚至更好:
Decimal d;
if ( decimal.TryParse(txtPrice.Text, out d) == false ){
//handle bad number...
}
您需要使用decimal.Parse
或Convert.ToDecimal
,因为您的字符串显然不是int
。在处理货币时,建议使用十进制。
Price = Convert.ToDecimal(NewPrice);
Price = decimal.Parse(NewPrice);
此外,我建议您查看TryParse
以用于验证:
decimal price;
if (decimal.TryParse(NewPrice, out price))
{ // do stuff }
您需要将其转换为double,然后转换为int。
int x = Convert.ToInt32( Convert.ToDouble("1.11"));
//Expected output: x = 1
Price = Convert.ToInt32(string.Format("{0.00}",txtPrice.Text));
在上面的代码中,您正在将十进制格式转换为整数。int32类型只能包含整整数,因此convert方法会给您一个错误。相反,您可以使用double的类型来正确地保持您的值。
double Price;
Price = Convert.ToDouble(string.Format("{0.00}",txtPrice.Text));