它应该是一个简单的代码:
string qty = "211.0000";
Console.WriteLine(Int32.Parse(qty));
我尝试使用Convert.ToInt32
或Int32.Parse
,但它们都会抛出错误:
错误(S):
用户代码中的例外:
System.FormatException:输入字符串的格式不正确 在System.Number.StringToNumber(String str,NumberStyles选项, NumberBuffer&安培; number,NumberFormatInfo info,Boolean parseDecimal)
中的NumberFormatInfo信息)
在System.Number.ParseInt32(String s,NumberStyles样式, Rextester.Program.Main(String [] args)
我是否犯了任何错误来定义字符串并给出值?我尝试使用string
或String
来定义变量。如果我使用Console.WriteLine(Convert.ToInt32("211.0000"))
,它就可以工作。
BTW我正在http://rextester.com/
进行测试答案 0 :(得分:4)
使用浮点值(具有显式小数分隔符.
)时,您应使用decimal
或double
:
using System.Globalization;
...
string qty = "211.0000";
// be careful: different cultures have different decimal separators
decimal result = decimal.Parse(qty, CultureInfo.InvariantCulture);
或
double result = double.Parse(qty, CultureInfo.InvariantCulture);
有了浮点表示,你可以将它四舍五入为整数
int value = (int) (result > 0 ? result + 0.5 : result - 0.5);
或
int value = (int) (Math.Round(result));
答案 1 :(得分:1)
我改变了我的回答,希望没问题,但对你来说最好的事情就是做一个decimal.TryParse
,它可以处理像{{-
这样的主角。 1}}和.
,然后将结果转换为整数。如果解析失败,则返回零(在字符串不是小数的情况下):
decimal result;
Console.WriteLine(decimal.TryParse(qty, NumberStyles.Any,
CultureInfo.InvariantCulture, out result) ? (int)result : 0);
可以使用相同的代码存储int以供以后使用:
decimal result;
int intResult = decimal.TryParse(qty, NumberStyles.Any,
CultureInfo.InvariantCulture, out result) ? (int) result : 0;
答案 2 :(得分:0)
您需要使用Decimal
代替int
Decimal.Parse(qty);
如果您只需要整数部分,请使用以下代码段
Double.Parse(qty, CultureInfo.InvariantCulture);
答案 3 :(得分:0)
您提供的值不是整数,在您尝试的所有内容之前将其转换为小数,然后在if(m.getX() == enemcraft.getX())
之后使用Convert.ToInt32
,因为整数不能包含小数点,所以这意味着你无法将其解析为Int32,请按照下一个示例:
mscorlib