Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中双精度/浮点型到整数的转换#_C# - Fatal编程技术网

C# C语言中双精度/浮点型到整数的转换#

C# C语言中双精度/浮点型到整数的转换#,c#,C#,我的问题可能看起来很傻,但我突然想到了。 我有一个字符串值“155.300”,我想把它转换成整数。 我试过了,但是抛出了系统。请有人帮我解决 由于源数据是字符串,您需要先将其转换为Double,然后将其强制转换为int或使用Convert.ToInt32,但请记住Convert.ToInt32将其舍入到最接近的整数,而强制转换则取整数的int部分(截断) 或者在一行中 int b =(int) Convert.ToDouble("155.000"); 编辑 既然您想使用小数点作为千位分隔符,我

我的问题可能看起来很傻,但我突然想到了。 我有一个字符串值“155.300”,我想把它转换成整数。
我试过了,但是抛出了系统。请有人帮我解决

由于源数据是字符串,您需要先将其转换为
Double
,然后将其强制转换为
int
或使用
Convert.ToInt32
,但请记住
Convert.ToInt32
将其舍入到最接近的整数,而强制转换则取整数的
int
部分(截断)

或者在一行中

int b =(int) Convert.ToDouble("155.000");
编辑

既然您想使用小数点作为千位分隔符,我相信德国文化您可以尝试以下方法

int b = ((int)Convert.ToDouble("154.500", new CultureInfo("de-DE")));
这将为您提供
154500

编辑2

或者更好的方法是将
int.Parse
numberstyle一起使用

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

首先将其解析为
decimal
double
(可能最好使用
decimal
,因为您有十进制数据),然后根据您的要求,使用cast或类似
Math.Round
的内容

基本上,您需要始终考虑得到的数据:“155.300”不是整数的字符串表示形式,所以不要试图将其解析为整数。按原样解析它,然后将其转换为整数

或者,您可以先破解字符串表示,但我个人认为,在许多情况下,这是一种更脆弱的方法

编辑:请注意,如果这实际上已经是一个整数,但使用了千位分隔符,则根本不需要使用
double
——可以使用,指定适当的区域性和数字样式:

int parsed = int.Parse(text, NumberStyles.Integer | NumberStyles.AllowThousands,
                       culture);

这是一个工作转换示例。请特别注意边缘条件,如果使用几种成圆/铸造技术,输出可能会有所不同

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); 
    }
}
类程序
{
公共静态int MyToInt(字符串str)
{
双重结果;
bool success=Double.TryParse(str,out结果);
如果(!成功)
{
抛出新的ArgumentException(
“无法将字符串解析为双精度”);
}
返回Convert.ToInt32(结果);//156
//返回(int)结果;//155您可以尝试以下方法:

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);

你试图使用的代码是什么?事实上,我得到的是一个字符串值,它是我上面提到的十进制数,我需要乘以1000。因此,它应该像155300和hv一样发送到服务器。嗨,哈比布,我尝试了这两种情况,但都没有得到正确的答案。当我使用第一种情况作为我的值“153.500”时得到154,然后我尝试了第二个一行单数…得到153。@Tim,你想要什么?预期的输出应该是什么?如果原始值是“154.500”,那么我想要154500作为int。那么,在这种情况下,你可以做一个删除小数点并尝试将其解析为int。@Tim:是“.”这里实际上是一个千位分隔符,或者这实际上是一个刚刚超过153的值,但是您想乘以1000?您需要非常清楚数据的含义。是否有一个方法
int.ParseExact
?因为我似乎找不到it@Habib+1用于在编译器生成的代码中查找错误
string str = "123.123";
double result;
double.TryParse(str, out result);

int final = (int)(result * 1000);