在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)
答案 0 :(得分:1)
答案 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]));
成为int
,coord_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 );