我对Convert.ToInt32()的工作方式感到困惑吗?

时间:2019-07-31 02:15:32

标签: c#

我今天晚上刚刚开始CodeCademy C#课程,并且有一个问题。我在转换数据类型部分中,并且能够“通过”练习,但是代码未输出预期的结果。当我运行程序时,它提示“您最喜欢的号码是多少?”如果我输入5,它会达到预期效果,并输出“您喜欢的数字是5”。我不明白的是,如果我输入five,程序将抛出incorrect format error。我以为Convert.ToInt32()方法应该接收字符串输入并将其转换为对应的整数?感谢您对我正在做的事情或错误想法的任何帮助。

static void Main(string[] args) {

   // Ask user for fave number
   Console.Write("Enter your favorite number?: ");

   // Turn that answer into an integer

  int faveNumber = Convert.ToInt32(Console.ReadLine());
  Console.WriteLine("your favorite number is:" + faveNumber);

}

2 个答案:

答案 0 :(得分:7)

Convert.ToInt32()采用仅包含数字字符的字符串。其他都是错误。将英语单词(例如"five")转换为数字值不是Convert.ToInt32()所做的。

如果要将诸如"one hundred and fifteen"之类的字符串转换为int,则要复杂一些。这是我前段时间写的一个有趣的答案,它就是这样做的(尽管是long而不是int):

https://stackoverflow.com/a/11278412/14357

答案 1 :(得分:1)

Convert.ToInt32()仅能转换数字字符。它无法识别英语词汇。如果您想识别英语,则可以编写类似的功能来完成这项工作。

CREATE FUNCTION test.FORMATDATE(dateString CHAR(128), timeString VARCHAR(8))
  RETURNS TIMESTAMP(6)

  SPECIFIC FORMATDATE

  DETERMINISTIC

  LANGUAGE SQL

  CONTAINS SQL

  BEGIN ATOMIC

    DECLARE tmpDateStr VARCHAR(128);--
    DECLARE ret TIMESTAMP(6);--
    DECLARE year VARCHAR(4);--
    DECLARE month VARCHAR(2);--
    DECLARE day VARCHAR(2);--

    SET tmpDateStr = TRIM(REPLACE(REPLACE(dateString,'-',''),'/',''));--

    IF (LENGTH(tmpDateStr) = 6 AND INTEGER(LEFT(tmpDateStr,2)) >= 70 ) THEN
        SET tmpDateStr = '19' || tmpDateStr;--
    END IF;--

    IF (LENGTH(tmpDateStr) = 6 AND INTEGER(LEFT(tmpDateStr,2)) < 70 ) THEN
          SET tmpDateStr = '20' || tmpDateStr;--
    END IF;--

    IF (LENGTH(tmpDateStr) != 8) THEN
      RETURN TIMESTAMP('1970-01-01 00:00:00.000000');--
    END IF;--

    SET year = LEFT(tmpDateStr,4);--
    SET month = SUBSTR(tmpDateStr,5,2);--
    SET day = RIGHT(tmpDateStr,2);--

    set ret = TIMESTAMP(year || '-' || month || '-' || day || ' ' || timeString ||'.000000');--

    RETURN ret;--

END