【问题标题】:How do you Javascript charAt() a integer?你如何 Javascript charAt() 一个整数?
【发布时间】:2012-01-17 05:10:16
【问题描述】:

我有一个数组。该数组responses[1] 中的一个值是一个整数。这个整数可以从 1 到你想要的任何数字。我需要获取整数中的最后一个数字,并根据该数字确定是否应该以“st”、“nd”、“rd”或“th”结尾。我怎么做?我试过了:

var placeEnding;
var placeInt = response[1]; //101
var stringInt = placeInt.toString();
var lastInt = stringInt.charAt(stringInt.length-1);
if (lastInt == '1'){
    placeEnding = 'st';
} else if (lastInt == '2'){
    placeEnding = 'nd';
} else if (lastInt == '3'){
    placeEnding = 'rd';
} else {
    placeEnding = 'th';
}

但这没有用。每次我尝试打印placeEnding 时,它总是'th',无论它应该是'st'、'rd'还是'nd'。当我尝试打印placeIntstringIntlastInt 时,它们都打印为" 而不是数字。为什么会这样?当我稍后在脚本中打印responses[1] 时,我得到正确答案没有问题。

【问题讨论】:

  • 响应[1] 或响应[1]..?
  • @Sudhir 哇!谢谢。这正是问题所在。响应[1]。
  • 请注意,您的代码与下面的大多数答案一样,会将数字 11、12 和 13 转换为“11st”、“12nd”和“13rd”。要正确处理这些情况,您还需要检查倒数第二个数字是否不是 1。(另外,我无法抗拒链接到 this related codegolf.SE challenge,这是在这个问题之后几天发布的.)

标签: javascript parsing integer


【解决方案1】:

如果你想要的只是最后一个数字,只需使用模运算符: 123456 % 10 == 6
无需担心字符串转换或其他任何事情。

【讨论】:

  • +1 可能比我的解决方案更有效。我更新了我的答案,但看到我关于小数点的警告。
【解决方案2】:

给你:

var ends = {
    '1': 'st',
    '2': 'nd',
    '3': 'rd'
}

response[1] += ends[ response[1].toString().split('').pop() ] || 'th';

正如其他人指出的那样,使用模数 10 更有效:

response[1] += ends[ parseInt(response[1], 10) % 10 ] || 'th';

但是,如果数字中有小数,这将中断。如果您认为可能,请使用以前的解决方案。

【讨论】:

  • 你认为对应于21.173的序数是什么? “二十一点七分之三”? “二十一点一七三”?幸运的是,我怀疑这不是一个在实践中经常出现的问题。
【解决方案3】:

在我的犀牛控制台中。

js> (82434).toString().match(/\d$/)
4

【讨论】:

    【解决方案4】:

    获取 lastInt 的另一种方法是:

     var lastInt = parseInt(stringInt)%10;
    switch lastInt {
        case 1:
            placeEnding = 'st';
            break;
        case 2:
            placeEnding = 'nd';
            break;
        case 3:
            placeEnding = 'rd';
            break;
        default:
            placeEnding = 'th';
    }
    

    【讨论】:

      【解决方案5】:

      我注意到我想在日期中使用 st/nd/rd/th,只是注意到在 10 到 20 之间有一个例外,第十一第十二等等,所以我得出了这样的结论:

      if (n % 10 === 1 && (n % 100) - 1 !== 10) {
          return "st";
      } else if (n % 10 === 2 && (n % 100) - 2 !== 10) {
          return "nd";
      } else if (n % 10 === 3 && (n % 100) - 3 !== 10) {
          return "rd";
      }
      return "th";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 2020-09-29
        相关资源
        最近更新 更多