0

我的问题可能看起来很愚蠢,但我很满意。我有一个字符串值“155.300”,我想将其转换为整数。我试过但抛出 System.FormatException ......请有人帮助我。

4

4 回答 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.Parsewith NumberStyles.AllowThousands

 int b = int.Parse("154.500", NumberStyles.AllowThousands, new CultureInfo("de-DE"));
于 2012-09-04T10:30:54.763 回答
5

首先将其解析为decimalor 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 回答