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