我的问题可能看起来很愚蠢,但我很满意。我有一个字符串值“155.300”,我想将其转换为整数。我试过但抛出 System.FormatException ......请有人帮助我。
问问题
172 次
4 回答
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
with NumberStyles.AllowThousands
:
int b = int.Parse("154.500", NumberStyles.AllowThousands, new CultureInfo("de-DE"));
于 2012-09-04T10:30:54.763 回答
5
首先将其解析为decimal
or double
(可能最好使用decimal
,因为您有Math.Round
十进制数据)然后根据您的要求强制转换或使用类似的东西。
基本上,您需要始终考虑您拥有的数据:“155.300”不是整数的字符串表示,因此不要尝试将其解析为整数。将其按原样解析,然后将其转换为整数。
或者,您可以先破解字符串表示,但我个人认为在许多情况下这是一种更脆弱的方法。
编辑:请注意,如果这确实已经是一个整数,但有千位分隔符,则根本不需要使用double
- 您可以使用int.Parse
,指定适当的文化和数字样式:
int parsed = int.Parse(text, NumberStyles.Integer | NumberStyles.AllowThousands,
culture);
于 2012-09-04T10:31:35.060 回答
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);
}
}
于 2012-09-04T10:43:56.323 回答
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);
于 2012-09-04T11:00:07.643 回答