我的问题可能看起来很愚蠢,但我很震惊。 我有一个字符串值“155.300”,我想将其转换为整数。 我尝试但抛出System.FormatException ....请有人帮助我。
答案 0 :(得分:5)
由于您的源数据是字符串,因此您需要首先将其转换为Double
,然后将其转换为int
或使用Convert.ToInt32
,但请记住Convert.ToInt32
将其舍入到最近整数,而铸造采用数字的int
部分(截断)
double d = Convert.ToDouble("155.00");
int a = (int) d;
int b = Convert.ToInt32(d);
或单行
int b =(int) Convert.ToDouble("155.000");
修改强>
由于您希望使用小数点作为千位分隔符,我相信德国文化您可以尝试以下操作。
int b = ((int)Convert.ToDouble("154.500", new CultureInfo("de-DE")));
这会给你154500
编辑2
或者更好的方法是将int.Parse
与NumberStyles.AllowThousands
:
int b = int.Parse("154.500", NumberStyles.AllowThousands, new CultureInfo("de-DE"));
答案 1 :(得分:5)
首先将其解析为decimal
或double
(可能最好使用decimal
,因为您得到十进制数据)然后投出或使用某些内容比如Math.Round
,视您的要求而定。
基本上,您需要始终考虑您所获得的数据:“155.300”不是整数的字符串表示形式,因此请勿尝试将其解析为整数。将其解析为原样,然后将其转换为整数。
或者,你可能首先攻击字符串表示,但我个人认为在许多情况下这是一种更脆弱的方法。
编辑:请注意,如果确实已经是一个整数,但有千位分隔符,则根本不需要使用double
- 您可以使用{{3} },指定适当的文化和数字样式:
int parsed = int.Parse(text, NumberStyles.Integer | NumberStyles.AllowThousands,
culture);
答案 2 :(得分:0)
这是一个有效的转换示例。根据边缘条件进行特殊观察,如果使用多种圆角/铸造技术,输出可能会有所不同
class Program
{
public static int MyToInt(string str)
{
double result;
bool success = Double.TryParse(str, out result);
if (!success)
{
throw new ArgumentException(
"Cannot parse a string into a double");
}
return Convert.ToInt32(result); // 156
//return (int)result; // 155 <<
//return (int)Math.Round(result); // 156
}
static void Main(string[] args)
{
string s = "155.500";
int value = MyToInt(s);
}
}
答案 3 :(得分:0)
你可以试试这个:
string str = "123.123";
str = str.Remove(str.IndexOf('.'), 1);
int result;
int.TryParse(str, out result);
修改:根据您的评论,修改为乘以千。 或者你可以尝试:
string str = "123.123";
double result;
double.TryParse(str, out result);
int final = (int)(result * 1000);