C#字符串浮动到int转换

时间:2013-12-29 13:46:13

标签: c# string int type-conversion

在C#中将字符串(十进制数)转换为整数的最佳方法是什么? 在我的例子中,message是一个字符串,其坐标用{x:y}分隔 这对我不起作用(不知道为什么):

string[] coordinates = Regex.Split(message, "{x:y}");
int coord_X = (int) float.Parse(coordinates[0]);
int coord_Y = (int) float.Parse(coordinates[1]);

消息等于:-5.5707855 {x:y} 0.8193512 {x:y}
coord_X是-55707855(应该是-5.5707855)
coord_Y是8193512(应该是0.8193512)

4 个答案:

答案 0 :(得分:1)

Int不支持小数。您可以使用decimal,float或double。

有几种方法可以转换这些类型。

查看Convert课程。

答案 1 :(得分:1)

Int数据类型不能包含小数部分。试试这个

var message = "-5.5707855{x:y}0.8193512{x:y}";
string[] coordinates = Regex.Split(message, "{x:y}");
var coord_X = float.Parse(coordinates[0]); // or decimal.Parse
var coord_Y = float.Parse(coordinates[1]); // or decimal.Parse

console.WriteLine(coord_X); // -5.5707855
console.WriteLine(coord_Y); // 0.8193512

答案 2 :(得分:0)

您正在解析而未指定IFormatProvider(例如CultureInfo)。如果您的机器的语言环境以这种方式设置(例如意大利语,法语等),则字符串输入中的 point 字符可能会被解释为千位分隔符(而不是十进制) ..)。 在这种情况下,Parse方法将(正确)返回55百万等而不是5.5等... 为了控制所有这些细节,我建议您使用Parse的重载:

public static float Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)

如果您需要从float转到int我更喜欢转换而不是转换(为清晰起见):

int coord_X = Convert.ToInt32(float.Parse(lines[0]));

成为intcoord_X舍入为最接近的整数。

答案 3 :(得分:0)

使用正则表达式:

      string s = "-5.5707855{x:y}0.8193512{x:y}";
      MatchCollection matchCollection = Regex.Matches( s, @"(.+?)\{x:y}", RegexOptions.None );
      double coord_X = double.Parse( matchCollection[ 0 ].Groups[ 1 ].Value );
      double coord_Y = double.Parse( matchCollection[ 1 ].Groups[ 1 ].Value );