在C#中将double / floating转换为整数

时间:2012-09-04 10:30:23

标签: c#

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

4 个答案:

答案 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.ParseNumberStyles.AllowThousands

一起使用
 int b = int.Parse("154.500", NumberStyles.AllowThousands, new CultureInfo("de-DE"));

答案 1 :(得分:5)

首先将其解析为decimaldouble(可能最好使用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);