为什么Convert.ToInt32或Int32.Parse对我不起作用?

时间:2017-04-04 19:13:52

标签: c# .net

它应该是一个简单的代码:

        string qty = "211.0000";
        Console.WriteLine(Int32.Parse(qty));

我尝试使用Convert.ToInt32Int32.Parse,但它们都会抛出错误: 错误(S): 用户代码中的例外:

  

System.FormatException:输入字符串的格式不正确   在System.Number.StringToNumber(String str,NumberStyles选项,   NumberBuffer&安培; number,NumberFormatInfo info,Boolean parseDecimal)
  在System.Number.ParseInt32(String s,NumberStyles样式,   Rextester.Program.Main(String [] args)

中的NumberFormatInfo信息)

我是否犯了任何错误来定义字符串并给出值?我尝试使用stringString来定义变量。如果我使用Console.WriteLine(Convert.ToInt32("211.0000")),它就可以工作。

BTW我正在http://rextester.com/

进行测试

4 个答案:

答案 0 :(得分:4)

使用浮点值(具有显式小数分隔符.)时,您应使用decimaldouble

  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